This workflow follows the Chainllm → HTTP Request recipe pattern — see all workflows that pair these two integrations.
The workflow JSON
Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →
{
"id": "vzU9QRZsHcyRsord",
"meta": {
"templateCredsSetupCompleted": true
},
"name": "Spot Workplace Discrimination Patterns with AI",
"tags": [
{
"id": "76EYz9X3GU4PtgSS",
"name": "human_resources",
"createdAt": "2025-01-30T18:52:17.614Z",
"updatedAt": "2025-01-30T18:52:17.614Z"
},
{
"id": "ey2Mx4vNaV8cKvao",
"name": "openai",
"createdAt": "2024-12-23T07:10:13.400Z",
"updatedAt": "2024-12-23T07:10:13.400Z"
}
],
"nodes": [
{
"id": "b508ab50-158a-4cbf-a52e-f53e1804e770",
"name": "When clicking \u2018Test workflow\u2019",
"type": "n8n-nodes-base.manualTrigger",
"position": [
280,
380
],
"parameters": {},
"typeVersion": 1
},
{
"id": "11a1a2d5-a274-44f7-97ca-5666a59fcb31",
"name": "OpenAI Chat Model1",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
2220,
800
],
"parameters": {
"options": {}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "395f7b67-c914-4aae-8727-0573fdbfc6ad",
"name": "OpenAI Chat Model2",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
2220,
380
],
"parameters": {
"options": {}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "6ab194a9-b869-4296-aea9-19afcbffc0d7",
"name": "Merge",
"type": "n8n-nodes-base.merge",
"position": [
2940,
600
],
"parameters": {
"mode": "combine",
"options": {},
"combineBy": "combineByPosition"
},
"typeVersion": 3
},
{
"id": "1eba1dd7-a164-4c70-8c75-759532bd16a0",
"name": "OpenAI Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
3840,
420
],
"parameters": {
"options": {}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "f25f1b07-cded-4ca7-9655-8b8f463089ab",
"name": "SET company_name",
"type": "n8n-nodes-base.set",
"position": [
540,
380
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "dd256ef7-013c-4769-8580-02c2d902d0b2",
"name": "company_name",
"type": "string",
"value": "=Twilio"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "87264a93-ab97-4e39-8d40-43365189f704",
"name": "Define dictionary of demographic keys",
"type": "n8n-nodes-base.set",
"position": [
740,
380
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "6ae671be-45d0-4a94-a443-2f1d4772d31b",
"name": "asian",
"type": "string",
"value": "Asian"
},
{
"id": "6c93370c-996c-44a6-a34c-4cd3baeeb846",
"name": "hispanic",
"type": "string",
"value": "Hispanic or Latinx"
},
{
"id": "dee79039-6051-4e9d-98b5-63a07d30f6b0",
"name": "white",
"type": "string",
"value": "White"
},
{
"id": "08d42380-8397-412f-8459-7553e9309b5d",
"name": "pacific_islander",
"type": "string",
"value": "Native Hawaiian or other Pacific Islander"
},
{
"id": "09e8ebc5-e7e7-449a-9036-9b9b54cdc828",
"name": "black",
"type": "string",
"value": "Black or African American"
},
{
"id": "39e910f8-3a8b-4233-a93a-3c5693e808c6",
"name": "middle_eastern",
"type": "string",
"value": "Middle Eastern"
},
{
"id": "169b3471-efa0-476e-aa83-e3f717c568f1",
"name": "indigenous",
"type": "string",
"value": "Indigenous American or Native Alaskan"
},
{
"id": "b6192296-4efa-4af5-ae02-1e31d28aae90",
"name": "male",
"type": "string",
"value": "Men"
},
{
"id": "4b322294-940c-459d-b083-8e91e38193f7",
"name": "female",
"type": "string",
"value": "Women"
},
{
"id": "1940eef0-6b76-4a26-9d8f-7c8536fbcb1b",
"name": "trans",
"type": "string",
"value": "Transgender and/or Non-Binary"
},
{
"id": "3dba3e18-2bb1-4078-bde9-9d187f9628dd",
"name": "hetero",
"type": "string",
"value": "Heterosexual"
},
{
"id": "9b7d10ad-1766-4b18-a230-3bd80142b48c",
"name": "lgbtqia",
"type": "string",
"value": "LGBTQ+"
},
{
"id": "458636f8-99e8-4245-9950-94e4cf68e371",
"name": "nondisabled",
"type": "string",
"value": "Non-Disabled"
},
{
"id": "a466e258-7de1-4453-a126-55f780094236",
"name": "disabled",
"type": "string",
"value": "People with Disabilities"
},
{
"id": "98735266-0451-432f-be7c-efcb09512cb1",
"name": "caregiver",
"type": "string",
"value": "Caregivers"
},
{
"id": "ebe2353c-9ff5-47bc-8c11-b66d3436f5b4",
"name": "parent",
"type": "string",
"value": "Parents/Guardians"
},
{
"id": "ab51c80c-d81d-41ab-94d9-c0a263743c17",
"name": "nonparent",
"type": "string",
"value": "Not a Parent or Caregiver"
},
{
"id": "cb7df429-c600-43f4-aa7e-dbc2382a85a0",
"name": "nonveteran",
"type": "string",
"value": "Non-Veterans"
},
{
"id": "dffbdb13-189a-462d-83d1-c5ec39a17d41",
"name": "veteran",
"type": "string",
"value": "Veterans"
}
]
},
"includeOtherFields": true
},
"typeVersion": 3.4
},
{
"id": "862f1c77-44a8-4d79-abac-33351ebb731b",
"name": "ScrapingBee Search Glassdoor",
"type": "n8n-nodes-base.httpRequest",
"position": [
940,
380
],
"parameters": {
"url": "https://app.scrapingbee.com/api/v1",
"options": {},
"sendQuery": true,
"authentication": "genericCredentialType",
"genericAuthType": "httpQueryAuth",
"queryParameters": {
"parameters": [
{
"name": "url",
"value": "=https://www.glassdoor.com/Search/results.htm?keyword={{ $json.company_name.toLowerCase().urlEncode() }}"
},
{
"name": "premium_proxy",
"value": "true"
},
{
"name": "block_resources",
"value": "false"
},
{
"name": "stealth_proxy",
"value": "true"
}
]
}
},
"credentials": {
"httpQueryAuth": {
"name": "<your credential>"
}
},
"typeVersion": 4.2
},
{
"id": "4c9bf05e-9c50-4895-b20b-b7c329104615",
"name": "Extract company url path",
"type": "n8n-nodes-base.html",
"position": [
1140,
380
],
"parameters": {
"options": {},
"operation": "extractHtmlContent",
"extractionValues": {
"values": [
{
"key": "url_path",
"attribute": "href",
"cssSelector": "body main div a",
"returnValue": "attribute"
}
]
}
},
"typeVersion": 1.2
},
{
"id": "d20bb0e7-4ca7-41d0-a3e9-41abc811b064",
"name": "ScrapingBee GET company page contents",
"type": "n8n-nodes-base.httpRequest",
"position": [
1340,
380
],
"parameters": {
"url": "https://app.scrapingbee.com/api/v1",
"options": {},
"sendQuery": true,
"authentication": "genericCredentialType",
"genericAuthType": "httpQueryAuth",
"queryParameters": {
"parameters": [
{
"name": "url",
"value": "=https://www.glassdoor.com{{ $json.url_path }}"
},
{
"name": "premium_proxy",
"value": "true"
},
{
"name": "block_resources",
"value": "false"
},
{
"name": "stealth_proxy",
"value": "true"
}
]
}
},
"credentials": {
"httpQueryAuth": {
"name": "<your credential>"
}
},
"typeVersion": 4.2
},
{
"id": "fce70cab-8ce3-4ce2-b040-ce80d66b1e62",
"name": "Extract reviews page url path",
"type": "n8n-nodes-base.html",
"position": [
1540,
380
],
"parameters": {
"options": {},
"operation": "extractHtmlContent",
"extractionValues": {
"values": [
{
"key": "url_path",
"attribute": "href",
"cssSelector": "#reviews a",
"returnValue": "attribute"
}
]
}
},
"typeVersion": 1.2
},
{
"id": "d2e7fee9-e3d4-42bf-8be6-38b352371273",
"name": "ScrapingBee GET Glassdoor Reviews Content",
"type": "n8n-nodes-base.httpRequest",
"position": [
1760,
380
],
"parameters": {
"url": "https://app.scrapingbee.com/api/v1",
"options": {},
"sendQuery": true,
"authentication": "genericCredentialType",
"genericAuthType": "httpQueryAuth",
"queryParameters": {
"parameters": [
{
"name": "url",
"value": "=https://www.glassdoor.com{{ $json.url_path }}"
},
{
"name": "premium_proxy",
"value": "True"
},
{
"name": "block_resources",
"value": "False"
},
{
"name": "stealth_proxy",
"value": "true"
}
]
}
},
"credentials": {
"httpQueryAuth": {
"name": "<your credential>"
}
},
"typeVersion": 4.2
},
{
"id": "0c322823-0569-4bd5-9c4e-af3de0f8d7b4",
"name": "Extract Overall Review Summary",
"type": "n8n-nodes-base.html",
"position": [
1980,
260
],
"parameters": {
"options": {},
"operation": "extractHtmlContent",
"extractionValues": {
"values": [
{
"key": "review_summary",
"cssSelector": "div[data-test=\"review-summary\"]",
"returnValue": "html"
}
]
}
},
"typeVersion": 1.2
},
{
"id": "851305ba-0837-4be9-943d-7282e8d74aee",
"name": "Extract Demographics Module",
"type": "n8n-nodes-base.html",
"position": [
1980,
520
],
"parameters": {
"options": {},
"operation": "extractHtmlContent",
"extractionValues": {
"values": [
{
"key": "demographics_content",
"cssSelector": "div[data-test=\"demographics-module\"]",
"returnValue": "html"
}
]
}
},
"typeVersion": 1.2
},
{
"id": "cf9a6ee2-53b5-4fbf-a36c-4b9dab53b795",
"name": "Extract overall ratings and distribution percentages",
"type": "@n8n/n8n-nodes-langchain.informationExtractor",
"position": [
2200,
200
],
"parameters": {
"text": "={{ $json.review_summary }}",
"options": {},
"attributes": {
"attributes": [
{
"name": "average_rating",
"type": "number",
"required": true,
"description": "The overall average rating for this company."
},
{
"name": "total_number_of_reviews",
"type": "number",
"required": true,
"description": "The total number of reviews for this company."
},
{
"name": "5_star_distribution_percentage",
"type": "number",
"required": true,
"description": "The percentage distribution of 5 star reviews"
},
{
"name": "4_star_distribution_percentage",
"type": "number",
"required": true,
"description": "The percentage distribution of 4 star reviews"
},
{
"name": "3_star_distribution_percentage",
"type": "number",
"required": true,
"description": "The percentage distribution of 3 star reviews"
},
{
"name": "2_star_distribution_percentage",
"type": "number",
"required": true,
"description": "The percentage distribution of 2 star reviews"
},
{
"name": "1_star_distribution_percentage",
"type": "number",
"required": true,
"description": "The percentage distribution of 1 star reviews"
}
]
}
},
"typeVersion": 1
},
{
"id": "ae164f6e-04e7-4d8b-951e-a17085956f4b",
"name": "Extract demographic distributions",
"type": "@n8n/n8n-nodes-langchain.informationExtractor",
"position": [
2200,
620
],
"parameters": {
"text": "={{ $json.demographics_content }}",
"options": {
"systemPromptTemplate": "You are an expert extraction algorithm.\nOnly extract relevant information from the text.\nIf you do not know the value of an attribute asked to extract, you may use 0 for the attribute's value."
},
"attributes": {
"attributes": [
{
"name": "asian_average_rating",
"type": "number",
"required": true,
"description": "=The average rating for this company by employees who self identified as asian."
},
{
"name": "asian_total_number_of_reviews",
"type": "number",
"required": true,
"description": "=The number of reviews for this company by employees who self-identified as asian."
},
{
"name": "hispanic_average_rating",
"type": "number",
"required": true,
"description": "=The average rating for this company by employees who self identified as hispanic."
},
{
"name": "hispanic_total_number_of_reviews",
"type": "number",
"required": true,
"description": "=The number of reviews for this company by employees who self-identified as hispanic."
},
{
"name": "white_average_rating",
"type": "number",
"required": true,
"description": "=The average rating for this company by employees who self identified as white."
},
{
"name": "white_total_number_of_reviews",
"type": "number",
"required": true,
"description": "=The number of reviews for this company by employees who self-identified as white."
},
{
"name": "pacific_islander_average_rating",
"type": "number",
"required": true,
"description": "=The average rating for this company by employees who self identified as native hawaiian or pacific islander."
},
{
"name": "pacific_islander_total_number_of_reviews",
"type": "number",
"required": true,
"description": "=The number of reviews for this company by employees who self-identified as native hawaiian or pacific islander."
},
{
"name": "black_average_rating",
"type": "number",
"required": true,
"description": "=The average rating for this company by employees who self identified as black."
},
{
"name": "black_total_number_of_reviews",
"type": "number",
"required": true,
"description": "=The number of reviews for this company by employees who self-identified as black."
},
{
"name": "middle_eastern_average_rating",
"type": "number",
"required": true,
"description": "=The average rating for this company by employees who self identified as middle eastern."
},
{
"name": "middle_eastern_total_number_of_reviews",
"type": "number",
"required": true,
"description": "=The number of reviews for this company by employees who self-identified as middle_eastern."
},
{
"name": "indigenous_average_rating",
"type": "number",
"required": true,
"description": "=The average rating for this company by employees who self identified as indigenous american or native alaskan."
},
{
"name": "indigenous_total_number_of_reviews",
"type": "number",
"required": true,
"description": "=The number of reviews for this company by employees who self-identified as indigenous american or native alaskan."
},
{
"name": "male_average_rating",
"type": "number",
"required": true,
"description": "=The average rating for this company by employees who self identified as men."
},
{
"name": "male_total_number_of_reviews",
"type": "number",
"required": true,
"description": "=The number of reviews for this company by employees who self-identified as men."
},
{
"name": "female_average_rating",
"type": "number",
"required": true,
"description": "=The average rating for this company by employees who self identified as women."
},
{
"name": "female_total_number_of_reviews",
"type": "number",
"required": true,
"description": "=The number of reviews for this company by employees who self-identified as women."
},
{
"name": "trans_average_rating",
"type": "number",
"required": true,
"description": "=The average rating for this company by employees who self identified as transgender and/or non-binary."
},
{
"name": "trans_total_number_of_reviews",
"type": "number",
"required": true,
"description": "=The number of reviews for this company by employees who self-identified as trans and/or non-binary."
},
{
"name": "hetero_average_rating",
"type": "number",
"required": true,
"description": "=The average rating for this company by employees who self identified as heterosexual."
},
{
"name": "hetero_total_number_of_reviews",
"type": "number",
"required": true,
"description": "=The number of reviews for this company by employees who self-identified as heterosexual."
},
{
"name": "lgbtqia_average_rating",
"type": "number",
"required": true,
"description": "=The average rating for this company by employees who self identified as lgbtqia+."
},
{
"name": "lgbtqia_total_number_of_reviews",
"type": "number",
"required": true,
"description": "=The number of reviews for this company by employees who self-identified as lgbtqia+."
},
{
"name": "nondisabled_average_rating",
"type": "number",
"required": true,
"description": "=The average rating for this company by employees who self identified as non-disabled."
},
{
"name": "nondisabled_total_number_of_reviews",
"type": "number",
"required": true,
"description": "=The number of reviews for this company by employees who self-identified as non-disabled."
},
{
"name": "disabled_average_rating",
"type": "number",
"required": true,
"description": "=The average rating for this company by employees who self identified as people with disabilities."
},
{
"name": "disabled_total_number_of_reviews",
"type": "number",
"required": true,
"description": "=The number of reviews for this company by employees who self-identified as people with disabilities."
},
{
"name": "caregiver_average_rating",
"type": "number",
"required": true,
"description": "=The average rating for this company by employees who self identified as caregivers."
},
{
"name": "caregiver_total_number_of_reviews",
"type": "number",
"required": true,
"description": "=The number of reviews for this company by employees who self-identified as caregivers."
},
{
"name": "parent_average_rating",
"type": "number",
"required": true,
"description": "=The average rating for this company by employees who self identified as parents/guardians."
},
{
"name": "parent_total_number_of_reviews",
"type": "number",
"required": true,
"description": "=The number of reviews for this company by employees who self-identified as parents/guardians."
},
{
"name": "nonparent_average_rating",
"type": "number",
"required": true,
"description": "=The average rating for this company by employees who self identified as not a parent or caregiver."
},
{
"name": "nonparent_total_number_of_reviews",
"type": "number",
"required": true,
"description": "=The number of reviews for this company by employees who self-identified as not a parent or guardian."
},
{
"name": "nonveteran_average_rating",
"type": "number",
"required": true,
"description": "=The average rating for this company by employees who self identified as non-veterans."
},
{
"name": "nonveteran_total_number_of_reviews",
"type": "number",
"required": true,
"description": "=The number of reviews for this company by employees who self-identified as non-veterans."
},
{
"name": "veteran_average_rating",
"type": "number",
"required": true,
"description": "=The average rating for this company by employees who self identified as veterans."
},
{
"name": "veteran_total_number_of_reviews",
"type": "number",
"required": true,
"description": "=The number of reviews for this company by employees who self-identified as veterans."
}
]
}
},
"typeVersion": 1
},
{
"id": "c8d9e45c-7d41-47bd-b9a9-0fa70de5d154",
"name": "Define contributions to variance",
"type": "n8n-nodes-base.set",
"position": [
2560,
200
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "7360b2c2-1e21-45de-8d1a-e72b8abcb56b",
"name": "contribution_to_variance.5_star",
"type": "number",
"value": "={{ ($json.output['5_star_distribution_percentage'] / 100) * Math.pow(5 - $json.output.average_rating,2) }}"
},
{
"id": "acdd308a-fa33-4e33-b71b-36b9441bfa06",
"name": "contribution_to_variance.4_star",
"type": "number",
"value": "={{ ($json.output['4_star_distribution_percentage'] / 100) * Math.pow(4 - $json.output.average_rating,2) }}"
},
{
"id": "376818f3-d429-4abe-8ece-e8e9c5585826",
"name": "contribution_to_variance.3_star",
"type": "number",
"value": "={{ ($json.output['3_star_distribution_percentage'] / 100) * Math.pow(3 - $json.output.average_rating,2) }}"
},
{
"id": "620d5c37-8b93-4d39-9963-b7ce3a7f431e",
"name": "contribution_to_variance.2_star",
"type": "number",
"value": "={{ ($json.output['2_star_distribution_percentage'] / 100) * Math.pow(2 - $json.output.average_rating,2) }}"
},
{
"id": "76357980-4f9b-4b14-be68-6498ba25af67",
"name": "contribution_to_variance.1_star",
"type": "number",
"value": "={{ ($json.output['1_star_distribution_percentage'] / 100) * Math.pow(1 - $json.output.average_rating,2) }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "8ea03017-d5d6-46ef-a5f1-dae4372f6256",
"name": "Set variance and std_dev",
"type": "n8n-nodes-base.set",
"position": [
2740,
200
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "3217d418-f1b0-45ff-9f9a-6e6145cc29ca",
"name": "variance",
"type": "number",
"value": "={{ $json.contribution_to_variance.values().sum() }}"
},
{
"id": "acdb9fea-15ec-46ed-bde9-073e93597f17",
"name": "average_rating",
"type": "number",
"value": "={{ $('Extract overall ratings and distribution percentages').item.json.output.average_rating }}"
},
{
"id": "1f3a8a29-4bd4-4b40-8694-c74a0285eadb",
"name": "total_number_of_reviews",
"type": "number",
"value": "={{ $('Extract overall ratings and distribution percentages').item.json.output.total_number_of_reviews }}"
},
{
"id": "1906c796-1964-446b-8b56-d856269da938",
"name": "std_dev",
"type": "number",
"value": "={{ Math.sqrt($json.contribution_to_variance.values().sum()) }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "0570d531-8480-4446-8f02-18640b4b891e",
"name": "Calculate P-Scores",
"type": "n8n-nodes-base.code",
"position": [
3340,
440
],
"parameters": {
"jsCode": "// Approximate CDF for standard normal distribution\nfunction normSDist(z) {\n const t = 1 / (1 + 0.3275911 * Math.abs(z));\n const d = 0.254829592 * t - 0.284496736 * t * t + 1.421413741 * t * t * t - 1.453152027 * t * t * t * t + 1.061405429 * t * t * t * t * t;\n return 0.5 * (1 + Math.sign(z) * d * Math.exp(-z * z / 2));\n}\n\nfor (const item of $input.all()) {\n if (!item.json.population_analysis.p_scores) {\n item.json.population_analysis.p_scores = {};\n }\n\n for (const score of Object.keys(item.json.population_analysis.z_scores)) {\n // Check if review count exists and is greater than zero\n if (item.json.population_analysis.review_count[score] > 0) {\n // Apply the p_score formula: 2 * NORM.S.DIST(-ABS(z_score))\n const p_score = 2 * normSDist(-Math.abs(item.json.population_analysis.z_scores[score]));\n\n // Store the calculated p_score\n item.json.population_analysis.p_scores[score] = p_score;\n } else {\n // Remove z_scores, effect_sizes, and p_scores for groups with no reviews\n delete item.json.population_analysis.z_scores[score];\n delete item.json.population_analysis.effect_sizes[score];\n delete item.json.population_analysis.p_scores[score];\n }\n }\n}\n\nreturn $input.all();"
},
"typeVersion": 2
},
{
"id": "0bdb9732-67ef-440d-bdd2-42c4f64ff6b6",
"name": "Sort Effect Sizes",
"type": "n8n-nodes-base.set",
"position": [
3540,
440
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "61cf92ba-bc4e-40b8-a234-9b993fd24019",
"name": "population_analysis.effect_sizes",
"type": "object",
"value": "={{ Object.fromEntries(Object.entries($json.population_analysis.effect_sizes).sort(([,a],[,b]) => a-b )) }}"
}
]
},
"includeOtherFields": true
},
"typeVersion": 3.4
},
{
"id": "fd9026ef-e993-410a-87d6-40a3ad10b7a7",
"name": "Calculate Z-Scores and Effect Sizes",
"type": "n8n-nodes-base.set",
"position": [
3140,
600
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "790a53e8-5599-45d3-880e-ab1ad7d165d2",
"name": "population_analysis.z_scores.asian",
"type": "number",
"value": "={{ ($json.output.asian_average_rating - $json.average_rating) / ($json.std_dev / Math.sqrt($json.output.asian_total_number_of_reviews)) }}"
},
{
"id": "ebd61097-8773-45b9-a8e6-cdd840d73650",
"name": "population_analysis.effect_sizes.asian",
"type": "number",
"value": "={{ ($json.output.asian_average_rating - $json.average_rating) / $json.std_dev }}"
},
{
"id": "627b1293-efdc-485a-83c8-bd332d6dc225",
"name": "population_analysis.z_scores.hispanic",
"type": "number",
"value": "={{ ($json.output.hispanic_average_rating - $json.average_rating) / ($json.std_dev / Math.sqrt($json.output.hispanic_total_number_of_reviews)) }}"
},
{
"id": "822028d0-e94f-4cf7-9e13-8f8cc5c72ec0",
"name": "population_analysis.z_scores.white",
"type": "number",
"value": "={{ ($json.output.white_average_rating - $json.average_rating) / ($json.std_dev / Math.sqrt($json.output.white_total_number_of_reviews)) }}"
},
{
"id": "d32321f9-0fcf-4e54-9059-c3fd5a901ce0",
"name": "population_analysis.z_scores.pacific_islander",
"type": "number",
"value": "={{ ($json.output.pacific_islander_average_rating - $json.average_rating) / ($json.std_dev / Math.sqrt($json.output.pacific_islander_total_number_of_reviews)) }}"
},
{
"id": "e212d683-247f-45c4-9668-c290230a10ed",
"name": "population_analysis.z_scores.black",
"type": "number",
"value": "={{ ($json.output.black_average_rating - $json.average_rating) / ($json.std_dev / Math.sqrt($json.output.black_total_number_of_reviews)) }}"
},
{
"id": "882049c3-eb81-4c09-af0c-5c79b0ef0154",
"name": "population_analysis.z_scores.middle_eastern",
"type": "number",
"value": "={{ ($json.output.middle_eastern_average_rating - $json.average_rating) / ($json.std_dev / Math.sqrt($json.output.middle_eastern_total_number_of_reviews)) }}"
},
{
"id": "9bdc187f-3d8d-4030-9143-479eff441b7e",
"name": "population_analysis.z_scores.indigenous",
"type": "number",
"value": "={{ ($json.output.indigenous_average_rating - $json.average_rating) / ($json.std_dev / Math.sqrt($json.output.indigenous_total_number_of_reviews)) }}"
},
{
"id": "0cf11453-dbae-4250-a01a-c98e35aab224",
"name": "population_analysis.z_scores.male",
"type": "number",
"value": "={{ ($json.output.male_average_rating - $json.average_rating) / ($json.std_dev / Math.sqrt($json.output.male_total_number_of_reviews)) }}"
},
{
"id": "35a18fbc-7c2c-40fe-829d-2fffbdb13bb8",
"name": "population_analysis.z_scores.female",
"type": "number",
"value": "={{ ($json.output.female_average_rating - $json.average_rating) / ($json.std_dev / Math.sqrt($json.output.female_total_number_of_reviews)) }}"
},
{
"id": "a6e17c1b-a89b-4c05-8184-10f7248c159f",
"name": "population_analysis.z_scores.trans",
"type": "number",
"value": "={{ ($json.output.trans_average_rating - $json.average_rating) / ($json.std_dev / Math.sqrt($json.output.trans_total_number_of_reviews)) }}"
},
{
"id": "5e7dbccf-3011-4dba-863c-5390c1ee9e50",
"name": "population_analysis.z_scores.hetero",
"type": "number",
"value": "={{ ($json.output.hetero_average_rating - $json.average_rating) / ($json.std_dev / Math.sqrt($json.output.hetero_total_number_of_reviews)) }}"
},
{
"id": "1872152f-2c7e-4c24-bcd5-e2777616bfe2",
"name": "population_analysis.z_scores.lgbtqia",
"type": "number",
"value": "={{ ($json.output.lgbtqia_average_rating - $json.average_rating) / ($json.std_dev / Math.sqrt($json.output.lgbtqia_total_number_of_reviews)) }}"
},
{
"id": "91b2cb00-173e-421a-929a-51d2a6654767",
"name": "population_analysis.z_scores.nondisabled",
"type": "number",
"value": "={{ ($json.output.nondisabled_average_rating - $json.average_rating) / ($json.std_dev / Math.sqrt($json.output.nondisabled_total_number_of_reviews)) }}"
},
{
"id": "8bb7429e-0500-482c-8e8d-d2c63733ffe1",
"name": "population_analysis.z_scores.disabled",
"type": "number",
"value": "={{ ($json.output.disabled_average_rating - $json.average_rating) / ($json.std_dev / Math.sqrt($json.output.disabled_total_number_of_reviews)) }}"
},
{
"id": "89f00d0f-80db-4ad9-bf60-9385aa3d915b",
"name": "population_analysis.z_scores.caregiver",
"type": "number",
"value": "={{ ($json.output.caregiver_average_rating - $json.average_rating) / ($json.std_dev / Math.sqrt($json.output.caregiver_total_number_of_reviews)) }}"
},
{
"id": "0bb2b96c-d882-4ac1-9432-9fce06b26cf5",
"name": "population_analysis.z_scores.parent",
"type": "number",
"value": "={{ ($json.output.parent_average_rating - $json.average_rating) / ($json.std_dev / Math.sqrt($json.output.parent_total_number_of_reviews)) }}"
},
{
"id": "9aae7169-1a25-4fab-b940-7f2cd7ef39d9",
"name": "population_analysis.z_scores.nonparent",
"type": "number",
"value": "={{ ($json.output.nonparent_average_rating - $json.average_rating) / ($json.std_dev / Math.sqrt($json.output.nonparent_total_number_of_reviews)) }}"
},
{
"id": "aac189a0-d6fc-4581-a15d-3e75a0cb370a",
"name": "population_analysis.z_scores.nonveteran",
"type": "number",
"value": "={{ ($json.output.nonveteran_average_rating - $json.average_rating) / ($json.std_dev / Math.sqrt($json.output.nonveteran_total_number_of_reviews)) }}"
},
{
"id": "d40f014a-9c1d-4aea-88ac-d8a3de143931",
"name": "population_analysis.z_scores.veteran",
"type": "number",
"value": "={{ ($json.output.veteran_average_rating - $json.average_rating) / ($json.std_dev / Math.sqrt($json.output.veteran_total_number_of_reviews)) }}"
},
{
"id": "67e0394f-6d55-4e80-8a7d-814635620b1d",
"name": "population_analysis.effect_sizes.hispanic",
"type": "number",
"value": "={{ ($json.output.hispanic_average_rating - $json.average_rating) / $json.std_dev }}"
},
{
"id": "65cd3a22-2c97-4da1-8fcc-cc1af39118f2",
"name": "population_analysis.effect_sizes.white",
"type": "number",
"value": "={{ ($json.output.white_average_rating - $json.average_rating) / $json.std_dev }}"
},
{
"id": "a03bdf0f-e294-4a01-bb08-ddc16e9997a5",
"name": "population_analysis.effect_sizes.pacific_islander",
"type": "number",
"value": "={{ ($json.output.pacific_islander_average_rating - $json.average_rating) / $json.std_dev }}"
},
{
"id": "b0bdc40e-ed5f-475b-9d8b-8cf5beff7002",
"name": "population_analysis.effect_sizes.black",
"type": "number",
"value": "={{ ($json.output.black_average_rating - $json.average_rating) / $json.std_dev }}"
},
{
"id": "45cac3f0-7270-4fa4-8fc4-94914245a77d",
"name": "population_analysis.effect_sizes.middle_eastern",
"type": "number",
"value": "={{ ($json.output.middle_eastern_average_rating - $json.average_rating) / $json.std_dev }}"
},
{
"id": "cf5b7650-8766-45f6-8241-49aea62bf619",
"name": "population_analysis.effect_sizes.indigenous",
"type": "number",
"value": "={{ ($json.output.indigenous_average_rating - $json.average_rating) / $json.std_dev }}"
},
{
"id": "7c6a8d38-02b7-47a1-af44-5eebfb4140ec",
"name": "population_analysis.effect_sizes.male",
"type": "number",
"value": "={{ ($json.output.male_average_rating - $json.average_rating) / $json.std_dev }}"
},
{
"id": "4bf3dba9-4d07-4315-83ce-5fba288a00c9",
"name": "population_analysis.effect_sizes.female",
"type": "number",
"value": "={{ ($json.output.female_average_rating - $json.average_rating) / $json.std_dev }}"
},
{
"id": "d5e980b8-d7a8-4d4c-bcd9-fd9cbd20c729",
"name": "population_analysis.effect_sizes.trans",
"type": "number",
"value": "={{ ($json.output.trans_average_rating - $json.average_rating) / $json.std_dev }}"
},
{
"id": "2c8271c1-b612-4292-9d48-92c342b83727",
"name": "population_analysis.effect_sizes.hetero",
"type": "number",
"value": "={{ ($json.output.hetero_average_rating - $json.average_rating) / $json.std_dev }}"
},
{
"id": "996f2ea0-2e46-424b-9797-2d58fd56b1d3",
"name": "population_analysis.effect_sizes.lgbtqia",
"type": "number",
"value": "={{ ($json.output.lgbtqia_average_rating - $json.average_rating) / $json.std_dev }}"
},
{
"id": "8c987b6e-764d-422e-82de-00bd89269b22",
"name": "population_analysis.effect_sizes.nondisabled",
"type": "number",
"value": "={{ ($json.output.nondisabled_average_rating - $json.average_rating) / $json.std_dev }}"
},
{
"id": "ab796bb7-06ff-4282-b4b3-eefd129c743e",
"name": "population_analysis.effect_sizes.disabled",
"type": "number",
"value": "={{ ($json.output.disabled_average_rating - $json.average_rating) / $json.std_dev }}"
},
{
"id": "a17bf413-a098-4f24-8162-821a6a0ddb5e",
"name": "population_analysis.effect_sizes.caregiver",
"type": "number",
"value": "={{ ($json.output.caregiver_average_rating - $json.average_rating) / $json.std_dev }}"
},
{
"id": "99911e1e-06e8-4bbd-915d-b92b8b37b374",
"name": "population_analysis.effect_sizes.parent",
"type": "number",
"value": "={{ ($json.output.parent_average_rating - $json.average_rating) / $json.std_dev }}"
},
{
"id": "4ddf729b-361e-4d81-a67c-b6c18509e60b",
"name": "population_analysis.effect_sizes.nonparent",
"type": "number",
"value": "={{ ($json.output.nonparent_average_rating - $json.average_rating) / $json.std_dev }}"
},
{
"id": "725b8abb-7f72-45fc-a0c0-0e0a4f2cb131",
"name": "population_analysis.effect_sizes.nonveteran",
"type": "number",
"value": "={{ ($json.output.nonveteran_average_rating - $json.average_rating) / $json.std_dev }}"
},
{
"id": "20e54fa5-2faa-4134-90e5-81224ec9659e",
"name": "population_analysis.effect_sizes.veteran",
"type": "number",
"value": "={{ ($json.output.veteran_average_rating - $json.average_rating) / $json.std_dev }}"
},
{
"id": "2cc6465a-3a1c-4eb5-9e5a-72d41049d81e",
"name": "population_analysis.review_count.asian",
"type": "number",
"value": "={{ $json.output.asian_total_number_of_reviews }}"
},
{
"id": "0a5f6aae-ba21-47b5-8af8-fec2256e4df6",
"name": "population_analysis.review_count.hispanic",
"type": "number",
"value": "={{ $json.output.hispanic_total_number_of_reviews }}"
},
{
"id": "ae124587-7e24-4c1a-a002-ed801f859c30",
"name": "population_analysis.review_count.pacific_islander",
"type": "number",
"value": "={{ $json.output.pacific_islander_total_number_of_reviews }}"
},
{
"id": "fc790196-ca8e-4069-a093-87a413ebbf3e",
"name": "population_analysis.review_count.black",
"type": "number",
"value": "={{ $json.output.black_total_number_of_reviews }}"
},
{
"id": "7fd72701-781e-4e33-b000-174a853b172b",
"name": "population_analysis.review_count.middle_eastern",
"type": "number",
"value": "={{ $json.output.middle_eastern_total_number_of_reviews }}"
},
{
"id": "3751e7da-11a7-4af3-8aa6-1c6d53bcf27d",
"name": "population_analysis.review_count.indigenous",
"type": "number",
"value": "={{ $json.output.indigenous_total_number_of_reviews }}"
},
{
"id": "9ee0cac9-d2dd-4ba0-90ee-b2cdd22d9b77",
"name": "population_analysis.review_count.male",
"type": "number",
"value": "={{ $json.output.male_total_number_of_reviews }}"
},
{
"id": "ae7fcdc7-d373-4c24-9a65-94bd2b5847a8",
"name": "population_analysis.review_count.female",
"type": "number",
"value": "={{ $json.output.female_total_number_of_reviews }}"
},
{
"id": "3f53d065-269f-425a-b27d-dc5a3dbb6141",
"name": "population_analysis.review_count.trans",
"type": "number",
"value": "={{ $json.output.trans_total_number_of_reviews }}"
},
{
"id": "d15e976e-7599-4df0-9e65-8047b7a4cda8",
"name": "population_analysis.review_count.hetero",
"type": "number",
"value": "={{ $json.output.hetero_total_number_of_reviews }}"
},
{
"id": "c8b786d3-a980-469f-bf0e-de70ad44f0ea",
"name": "population_analysis.review_count.lgbtqia",
"type": "number",
"value": "={{ $json.output.lgbtqia_total_number_of_reviews }}"
},
{
"id": "e9429215-0858-4482-964a-75de7978ecbb",
"name": "population_analysis.review_count.nondisabled",
"type": "number",
"value": "={{ $json.output.nondisabled_total_number_of_reviews }}"
},
{
"id": "2c6e53c4-eab1-42aa-b956-ee882832f569",
"name": "population_analysis.review_count.disabled",
"type": "number",
"value": "={{ $json.output.disabled_total_number_of_reviews }}"
},
{
"id": "b5edfa25-ab11-4b94-9670-4d5589a62498",
"name": "population_analysis.review_count.caregiver",
"type": "number",
"value": "={{ $json.output.caregiver_total_number_of_reviews }}"
},
{
"id": "41084e96-c42f-4bb0-ac1a-883b46537fca",
"name": "population_analysis.review_count.parent",
"type": "number",
"value": "={{ $json.output.parent_total_number_of_reviews }}"
},
{
"id": "96496a38-9311-4ade-bd2f-2943d1d92314",
"name": "population_analysis.review_count.nonparent",
"type": "number",
"value": "={{ $json.output.nonparent_total_number_of_reviews }}"
},
{
"id": "5071771d-5f41-43cb-a8ce-e4e40ed3519b",
"name": "population_analysis.review_count.nonveteran",
"type": "number",
"value": "={{ $json.output.nonveteran_total_number_of_reviews }}"
},
{
"id": "2358e782-70da-4964-b625-5fe1946b5250",
"name": "population_analysis.review_count.veteran",
"type": "number",
"value": "={{ $json.output.veteran_total_number_of_reviews }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "85536931-839a-476b-b0dd-fa6d01c6d5c1",
"name": "Format dataset for scatterplot",
"type": "n8n-nodes-base.code",
"position": [
3340,
760
],
"parameters": {
"jsCode": "// Iterate through the input data and format the dataset for QuickChart\nfor (const item of $input.all()) {\n // Ensure the data object exists and initialize datasets\n item.json.data = {\n datasets: []\n };\n\n const z_scores = item.json.population_analysis.z_scores;\n const effect_sizes = item.json.population_analysis.effect_sizes;\n const review_count = item.json.population_analysis.review_count;\n\n // Ensure z_scores, effect_sizes, and review_count are defined and are objects\n if (z_scores && effect_sizes && review_count && typeof z_scores === 'object' && typeof effect_sizes === 'object' && typeof review_count === 'object') {\n // Initialize the dataset object\n const dataset = {\n label: 'Demographics Data',\n data: []\n };\n\n // Iterate through the demographic keys\n for (const key in z_scores) {\n // Check if review count for the demographic is greater than 0\n if (z_scores.hasOwnProperty(key) && effect_sizes.hasOwnProperty(key) && review_count[key] > 0) {\n\n // Add each demographic point to the dataset\n dataset.data.push({\n x: z_scores[key], // x = z_score\n y: effect_sizes[key], // y = effect_size\n label: $('Define dictionary of demographic keys').first().json[key],\n });\n }\n }\n\n // Only add the dataset if it contains data\n if (dataset.data.length > 0) {\n item.json.data.datasets.push(dataset);\n }\n\n delete item.json.population_analysis\n }\n}\n\n// Return the updated input with the data object containing datasets and labels\nreturn $input.all();\n"
},
"typeVersion": 2
},
{
"id": "957b9f6c-7cf8-4ec6-aec7-a7d59ed3a4ad",
"name": "Specify additional parameters for scatterplot",
"type": "n8n-nodes-base.set",
"position": [
3540,
760
],
"parameters": {
"options": {
"ignoreConversionErrors": false
},
"assignments": {
"assignments": [
{
"id": "5cd507f6-6835-4d2e-8329-1b5d24a3fc15",
"name": "type",
"type": "string",
"value": "scatter"
},
{
"id": "80b6f981-e3c7-4c6e-a0a1-f30d028fe15e",
"name": "options",
"type": "object",
"value": "={\n \"title\": {\n \"display\": true,\n \"position\": \"top\",\n \"fontSize\": 12,\n \"fontFamily\": \"sans-serif\",\n \"fontColor\": \"#666666\",\n \"fontStyle\": \"bold\",\n \"padding\": 10,\n \"lineHeight\": 1.2,\n \"text\": \"{{ $('SET company_name').item.json.company_name }} Workplace Population Bias\"\n },\n \"legend\": {\n \"display\": false\n },\n \"scales\": {\n \"xAxes\": [\n {\n \"scaleLabel\": {\n \"display\": true,\n \"labelString\": \"Z-Score\",\n \"fontColor\": \"#666666\",\n \"fontSize\": 12,\n \"fontFamily\": \"sans-serif\"\n }\n }\n ],\n \"yAxes\": [\n {\n \"scaleLabel\": {\n \"display\": true,\n \"labelString\": \"Effect Score\",\n \"fontColor\": \"#666666\",\n \"fontSize\": 12,\n \"fontFamily\": \"sans-serif\"\n }\n }\n ]\n },\n \"plugins\": {\n \"datalabels\": {\n \"display\": true,\n \"align\": \"top\",\n \"anchor\": \"center\",\n \"backgroundColor\": \"#eee\",\n \"borderColor\": \"#ddd\",\n \"borderRadius\": 6,\n \"borderWidth\": 1,\n \"padding\": 4,\n \"color\": \"#000\",\n \"font\": {\n \"family\": \"sans-serif\",\n \"size\": 10,\n \"style\": \"normal\"\n }\n }\n }\n }"
}
]
},
"includeOtherFields": true
},
"typeVersion": 3.4
},
{
"id": "a937132c-43fc-4fa0-ae35-885da89e51d1",
"name": "Quickchart Scatterplot",
"type": "n8n-nodes-base.httpRequest",
"position": [
3740,
760
],
"parameters": {
"url": "https://quickchart.io/chart",
"options": {},
"sendQuery": true,
"queryParameters": {
"parameters": [
{
"name": "c",
"value": "={{ $json.toJsonString() }}"
},
{
"name": "Content-Type",
"value": "application/json"
},
{
"name": "encoding",
"value": "url"
}
]
}
},
"typeVersion": 4.2
},
{
"id": "ede1931e-bac8-4279-b3a7-5980a190e324",
"name": "QuickChart Bar Chart",
"type": "n8n-nodes-base.quickChart",
"position": [
3740,
560
],
"parameters": {
"data": "={{ $json.population_analysis.effect_sizes.values() }}",
"output": "bar_chart",
"labelsMode": "array",
"labelsArray": "={{ $json.population_analysis.effect_sizes.keys() }}",
"chartOptions": {
"format": "png"
},
"datasetOptions": {
"label": "={{ $('SET company_name').item.json.company_name }} Effect Size on Employee Experience"
}
},
"typeVersion": 1
},
{
"id": "6122fec0-619c-48d3-ad2c-05ed55ba2275",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
480,
40
],
"parameters": {
"color": 7,
"width": 3741.593083126444,
"height": 1044.8111554136713,
"content": "# Spot Workplace Discrimination Patterns using ScrapingBee, Glassdoor, OpenAI, and QuickChart\n"
},
"typeVersion": 1
},
{
"id": "5cda63e8-f31b-46f6-8cb2-41d1856ac537",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
900,
180
],
"parameters": {
"color": 4,
"width": 1237.3377621763516,
"height": 575.9439659309116,
"content": "## Use ScrapingBee to gather raw data from Glassdoor"
},
"typeVersion": 1
},
{
"id": "28d247b2-9020-4280-83d2-d6583622c0b7",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
920,
240
],
"parameters": {
"color": 7,
"width": 804.3951263154196,
"height": 125.73173301324687,
"content": "### Due to javascript restrictions, a normal HTTP request cannot be used to gather user-reported details from Glassdoor. \n\nInstead, [ScrapingBee](https://www.scrapingbee.com/) offers a great tool with a very generous package of free tokens per month, which works out to roughly 4-5 runs of this workflow."
},
"typeVersion": 1
},
{
"id": "d65a239c-06d2-470b-b24a-23ec00a9f148",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
2180,
99.69933502879758
],
"parameters": {
"color": 5,
"width": 311.0523273992095,
"height": 843.8786512173932,
"content": "## Extract details with AI"
},
"typeVersion": 1
},
{
"id": "3cffd188-62a1-43a7-a67f-548e21d2b187",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
2516.1138215303854,
100
],
"parameters": {
"color": 7,
"width": 423.41585047129973,
"height": 309.71740416262054,
"content": "### Calculate variance and standard deviation from review rating distributions."
},
"typeVersion": 1
},
{
"id": "b5015c07-03e3-47d4-9469-e831b2c755c0",
"name": "Sticky Note6",
"type": "n8n-nodes-base.stickyNote",
"position": [
3320,
706.46982689582
],
"parameters": {
"color": 5,
"width": 639.5579220386832,
"height": 242.80759628871897,
"content": "## Formatting datasets for Scatterplot"
},
"typeVersion": 1
},
{
"id": "e52bb9d9-617a-46f5-b217-a6f670b6714c",
"name": "Sticky Note7",
"type": "n8n-nodes-base.stickyNote",
"position": [
500,
120
],
"parameters": {
"width": 356.84794255678776,
"height": 186.36110628732342,
"content": "## How this workflow works\n1. Replace ScrapingBee and OpenAI credentials\n2. Replace company_name with company of choice (workflow performs better with larger US-based organizations)\n3. Preview QuickChart data visualizations and AI data analysis"
},
"typeVersion": 1
},
{
"id": "d83c07a3-04ed-418f-94f1-e70828cba8b2",
"name": "Sticky Note8",
"type": "n8n-nodes-base.stickyNote",
"position": [
500,
880
],
"parameters": {
"color": 6,
"width": 356.84794255678776,
"height": 181.54335665904924,
"content": "### Inspired by [Wes Medford's Medium Post](https://medium.com/@wryanmedford/an-open-letter-to-twilios-leadership-f06f661ecfb4)\n\nWes performed the initial data analysis highlighting problematic behaviors at Twilio. I wanted to try and democratize the data analysis they performed for those less technical.\n\n**Hi, Wes!**"
},
"typeVersion": 1
},
{
"id": "ed0c1b4a-99fe-4a27-90bb-ac38dd20810b",
"name": "Sticky Note9",
"type": "n8n-nodes-base.stickyNote",
"position": [
4020,
880
],
"parameters": {
"color": 7,
"width": 847.5931795867759,
"height": 522.346478008115,
"content": "![image](https://quickchart.io/chart?c=%7B%0A%20%20%22type%22%3A%20%22scatter%22%2C%0A%20%20%22data%22%3A%20%7B%0A%20%20%20%20%22datasets%22%3A%20%5B%0A%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%22label%22%3A%20%22Demographics%20Data%22%2C%0A%20%20%20%20%20%20%20%20%22data%22%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%22x%22%3A%201.1786657494327952%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22y%22%3A%200.16190219204909295%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%22x%22%3A%200.5119796850491362%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22y%22%3A%200.0809510960245463%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%22x%22%3A%20-0.9300572848378476%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22y%22%3A%20-0.16190219204909329%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%22x%22%3A%20-0.42835293687811976%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22y%22%3A%20-0.16190219204909329%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%22x%22%3A%20-1.0890856121128139%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22y%22%3A%20-0.08095109602454664%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%
Credentials you'll need
Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.
httpQueryAuthopenAiApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
How this works
Quickly identify patterns of workplace discrimination in your organisation by analysing employee feedback and reviews with AI, empowering HR leaders and compliance officers to foster inclusive environments and mitigate risks before they escalate. This workflow processes data from sources like Glassdoor via HTTP requests, using OpenAI's chat models to detect biases related to demographics such as gender, ethnicity, or age in unstructured text. The key step involves merging extracted insights from multiple AI analyses into a cohesive report, highlighting potential issues for targeted interventions.
Use this workflow when investigating anonymous surveys or public reviews to uncover subtle discrimination trends during audits or culture assessments, particularly in large teams where manual review is impractical. Avoid it for real-time monitoring of live communications, as it relies on event-driven batch processing rather than continuous streams. Common variations include adapting the demographic keys for industry-specific factors or integrating additional data sources like internal HR databases for deeper analysis.
About this workflow
Spot Workplace Discrimination Patterns with AI. Uses manualTrigger, lmChatOpenAi, httpRequest, html. Event-driven trigger; 38 nodes.
Source: https://github.com/Zie619/n8n-workflows — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
Spot Workplace Discrimination Patterns with AI. Uses manualTrigger, lmChatOpenAi, httpRequest, html. Event-driven trigger; 38 nodes.
Stopanderror Extractfromfile. Uses manualTrigger, stickyNote, extractFromFile, informationExtractor. Event-driven trigger; 24 nodes.
Automate Sales Meeting Prep With Ai & Apify Sent To Whatsapp. Uses gmail, googleCalendar, lmChatOpenAi, informationExtractor. Event-driven trigger; 61 nodes.
This n8n template builds a meeting assistant that compiles timely reminders of upcoming meetings filled with email history and recent LinkedIn activity of other people on the invite. This is then disc
Accounting teams spend hours manually entering purchase bills into accounting systems—copying vendor details, creating items, checking duplicates, and reconciling totals. This workflow removes that ma