50 min readContent generation

Implementation Guide: Draft job descriptions, offer letters, and onboarding documentation

Step-by-step implementation guide for deploying AI to draft job descriptions, offer letters, and onboarding documentation for HR & Staffing clients.

Hardware Procurement

Dual Monitor (for HR content drafting workflows)

DellDell P2423D 24-inch QHD USB-C MonitorQty: 4

$250 per unit (MSP cost) / $350 suggested resale

Provides dual-screen workspace for HR staff to view AI-generated drafts alongside source data (job requisitions, compensation tables, org charts) side-by-side. Recommended for power users who draft 10+ documents per week. Not strictly required—existing monitors work if already dual-screen.

Software Procurement

Microsoft 365 E3 (base license)

Microsoftper-seat SaaS (CSP)

$36/user/month CSP cost / $42.50/user/month suggested resale

Base productivity suite providing Word, Outlook, Teams, SharePoint, and Power Platform access. Required foundation for Copilot add-on. MSP resells via CSP program.

Microsoft 365 Copilot Add-On

Microsoftper-seat SaaS (CSP)

$30/user/month CSP (15% discount available on E5 bundle through June 2026) / $35/user/month suggested resale

AI assistant embedded in Word, Outlook, Teams, and PowerPoint for generating job descriptions, offer letters, and onboarding docs natively within the tools HR staff already use. Provides Copilot chat for ad-hoc HR content requests.

$200/month per 25,000-credit pack / $240/month suggested resale

Low-code platform to build custom HR content generation agents grounded on company-specific data (compensation bands, brand guidelines, compliance policies). Powers the custom Job Description Agent, Offer Letter Agent, and Onboarding Agent.

OpenAI API (GPT-4.1)

OpenAIGPT-4.1

$2.00/1M input tokens + $8.00/1M output tokens; estimated $50–$200/month for typical HR usage (500–2000 documents/month)

Backend API for custom prompt pipelines when more control is needed than Copilot provides—batch JD generation, advanced template rendering, and bias-checking workflows. Used via Zapier custom code steps or Power Automate HTTP actions.

Zapier (Team Plan)

ZapierTeam Plan

$103.50/month for 2,000 tasks / $135/month suggested resale

Integration middleware connecting ATS (Greenhouse, Workable, Bullhorn), HRIS (BambooHR, Gusto), e-signature (DocuSign), and document storage (SharePoint). Automates the flow: requisition created → AI generates JD → routes for approval → posts to job boards.

$25/user/month (MSP partner cost) / $35/user/month suggested resale

E-signature platform for routing AI-generated offer letters to hiring managers for approval and then to candidates for signature. Integrates with SharePoint and Zapier for automated envelope creation.

$99–$329/user/month depending on features; enterprise starts at $15,000/year

Specialized inclusive language analysis for job descriptions. Provides real-time scoring and suggestions to reduce gender, racial, and ability bias. Recommended for clients in jurisdictions with AI hiring regulation (NYC, Illinois, Colorado) or with DEI mandates.

BambooHR (if client needs HRIS)

BambooHRper-employee SaaS

$12–$22 per employee per month; $250/month minimum for ≤25 employees

All-in-one HRIS with built-in AI Job Description Generator, employee data management, and onboarding workflows. Alternative to the Copilot-centric approach if client is not in the Microsoft ecosystem.

Prerequisites

  • Active Microsoft 365 E3 or E5 tenant with Azure AD/Entra ID configured for all HR staff users
  • Global Administrator or at least SharePoint Administrator and Teams Administrator roles available to the MSP for initial setup
  • Existing ATS platform (Greenhouse, Workable, Bullhorn, Lever, or iCIMS) with API access enabled and API keys generated
  • Existing HRIS platform (BambooHR, Gusto, Rippling, or ADP) with API access enabled for employee data retrieval
  • Business broadband internet (25+ Mbps minimum) at all client office locations
  • Client must provide: current job description templates (at least 20 examples), existing offer letter templates, current onboarding checklist/documentation, company brand guidelines, compensation band data, and organizational chart
  • Azure subscription (Pay-As-You-Go or existing EA) linked to the M365 tenant for Copilot Studio agent deployment
  • DNS and firewall rules allowing HTTPS (port 443) outbound to: *.openai.com, *.microsoft.com, *.copilot.microsoft.com, *.zapier.com, *.docusign.com
  • Identified HR content stakeholders: at minimum one HR Manager (approval authority), one Recruiter (primary user), and one Legal/Compliance reviewer
  • Client legal counsel has reviewed and approved the use of AI-generated content for employment documents in their jurisdiction(s)
  • OpenAI API account created at platform.openai.com with billing configured and organization-level data settings reviewed (Zero Data Retention enabled if required by client policy)
  • SharePoint Online site collection designated for HR document storage with appropriate permission groups (HR Team, Hiring Managers, Legal) already created

Installation Steps

...

Step 1: Environment Assessment & Discovery

Conduct a thorough audit of the client's current HR content workflows. Interview the HR Manager, lead Recruiter, and Legal/Compliance contact. Document the current process for creating job descriptions (who writes them, what templates exist, approval chain, where they are posted), offer letters (what fields are variable, who approves, how they are signed), and onboarding documents (what is included in the packet, how it is delivered to new hires). Catalog all existing templates and collect samples. Identify all software systems currently in use (ATS, HRIS, email, document storage, e-signature). Assess compliance requirements based on client jurisdiction(s).

Note

Use the MSP discovery questionnaire template. This step typically takes 3–5 hours of on-site or video meetings. Critical: identify any union contracts, multi-state operations, or international hiring that will affect template requirements. Document findings in a shared OneNote or Confluence page.

Step 2: Provision Microsoft 365 Copilot Licenses

Through the Microsoft Partner Center (CSP), assign Microsoft 365 Copilot add-on licenses to the identified HR users. Typically 3–10 seats depending on client size: HR Manager, Recruiters, HR Generalists, and optionally Hiring Managers who review content. Verify each user has a qualifying base license (M365 E3, E5, Business Standard, or Business Premium).

  • In Microsoft 365 Admin Center (admin.microsoft.com)
  • Navigate to Billing > Purchase services > Search 'Microsoft 365 Copilot'
  • Purchase required number of licenses via CSP
  • Navigate to Users > Active users > Select user > Licenses and apps
  • Enable 'Microsoft 365 Copilot' for each designated HR user
Verify Copilot license assignment for a user
powershell
Get-MgUserLicenseDetail -UserId 'recruiter@clientdomain.com' | Select-Object -ExpandProperty ServicePlans | Where-Object {$_.ServicePlanName -like '*Copilot*'}
Note

Copilot licenses take up to 24 hours to propagate. Assign licenses at least 2 business days before the Template Engineering phase. If the client qualifies for the Microsoft E5 + Copilot CSP bundle, apply the 15% discount (available through June 2026). Document all license assignments in the MSP's PSA/billing system.

Step 3: Configure SharePoint HR Document Library

Create a dedicated SharePoint site collection for HR AI content. This serves as the centralized repository for: (1) Input templates and brand guidelines that ground the AI, (2) Generated documents awaiting review, (3) Approved and finalized documents. Set up document libraries with metadata columns for document type, status, department, and date. Configure retention policies aligned with HR record-keeping requirements.

PowerShell: Connect to SharePoint Online and provision HR AI Content Hub site, document libraries, and metadata columns
powershell
# PowerShell: Connect to SharePoint Online
Install-Module -Name PnP.PowerShell -Force
Connect-PnPOnline -Url https://clientdomain-admin.sharepoint.com -Interactive

# Create HR AI Content site
New-PnPSite -Type TeamSite -Title 'HR AI Content Hub' -Alias 'hr-ai-content' -Description 'AI-generated HR documents and templates'

# Connect to the new site
Connect-PnPOnline -Url https://clientdomain.sharepoint.com/sites/hr-ai-content -Interactive

# Create document libraries
New-PnPList -Title 'Job Description Templates' -Template DocumentLibrary
New-PnPList -Title 'Offer Letter Templates' -Template DocumentLibrary
New-PnPList -Title 'Onboarding Templates' -Template DocumentLibrary
New-PnPList -Title 'Generated Documents' -Template DocumentLibrary
New-PnPList -Title 'Brand Guidelines' -Template DocumentLibrary

# Add metadata columns to Generated Documents
Add-PnPField -List 'Generated Documents' -DisplayName 'Document Type' -InternalName 'DocType' -Type Choice -Choices 'Job Description','Offer Letter','Onboarding Document'
Add-PnPField -List 'Generated Documents' -DisplayName 'Status' -InternalName 'DocStatus' -Type Choice -Choices 'Draft','Under Review','Approved','Published'
Add-PnPField -List 'Generated Documents' -DisplayName 'Department' -InternalName 'Department' -Type Text
Add-PnPField -List 'Generated Documents' -DisplayName 'Generated Date' -InternalName 'GeneratedDate' -Type DateTime
Note

Upload all collected client templates and brand guidelines to the respective libraries immediately after creation. These documents will be used to ground the Copilot Studio agents. Set library permissions: HR Team = Edit, Hiring Managers = Read + Approve, Legal = Read + Approve, All Employees = No Access.

Step 4: Upload and Organize Training Corpus

Upload all collected client documents to the SharePoint libraries created in Step 3. This includes: existing job descriptions (minimum 20, ideally 50+), offer letter templates, onboarding checklists, employee handbooks, brand voice guidelines, compensation band documents, org charts, and any compliance policies. Tag each document with appropriate metadata. This corpus grounds the AI agents and ensures generated content matches the client's voice, structure, and policies.

Bulk upload via PnP PowerShell
powershell
# Bulk upload via PnP PowerShell
$files = Get-ChildItem -Path 'C:\ClientDocs\JobDescriptions\' -Filter '*.docx'
foreach ($file in $files) {
    Add-PnPFile -Path $file.FullName -Folder 'Job Description Templates'
}

$files = Get-ChildItem -Path 'C:\ClientDocs\OfferLetters\' -Filter '*.docx'
foreach ($file in $files) {
    Add-PnPFile -Path $file.FullName -Folder 'Offer Letter Templates'
}

$files = Get-ChildItem -Path 'C:\ClientDocs\Onboarding\' -Filter '*.docx'
foreach ($file in $files) {
    Add-PnPFile -Path $file.FullName -Folder 'Onboarding Templates'
}

$files = Get-ChildItem -Path 'C:\ClientDocs\BrandGuidelines\' -Filter '*.*'
foreach ($file in $files) {
    Add-PnPFile -Path $file.FullName -Folder 'Brand Guidelines'
}
Note

Quality of input documents directly determines quality of AI output. If the client has fewer than 20 existing JDs, supplement with industry-standard templates and customize. Remove any PII from training documents before upload. Verify all uploads completed successfully by spot-checking 5–10 documents in the SharePoint UI.

Step 5: Create OpenAI API Project and Configure Security

Set up the OpenAI API project that will power custom prompt pipelines for batch generation and bias-checking workflows. Create an organization-specific project, generate API keys, configure usage limits, and enable Zero Data Retention if required by client policy.

1
Log into platform.openai.com with MSP service account
2
Navigate to Settings > Organization > Create new Project: 'ClientName-HR-Content'
3
Navigate to API Keys > Create new secret key — Name: 'clientname-hr-content-prod', Project: 'ClientName-HR-Content', Permissions: 'All' (or restrict to Chat Completions only)
4
Copy and securely store the key in MSP password vault (e.g., IT Glue, Hudu)
5
Set usage limits (Settings > Limits) — Monthly budget: $200 (adjust based on expected volume), Alert threshold: $150
6
If Zero Data Retention required: Navigate to Settings > Organization > Data Controls and enable 'Zero Data Retention' for API usage
Test API connectivity from command line
bash
curl https://api.openai.com/v1/chat/completions -H 'Content-Type: application/json' -H 'Authorization: Bearer sk-YOUR-KEY-HERE' -d '{"model":"gpt-4.1","messages":[{"role":"system","content":"You are an HR content assistant."},{"role":"user","content":"Write a one-sentence job description for a Software Engineer."}],"max_tokens":100}'
Note

NEVER store API keys in plaintext, code repositories, or shared documents. Use the MSP's password vault (IT Glue, Hudu, Keeper) with access restricted to authorized technicians. The $200/month budget limit prevents runaway costs if a Zap or automation misfires. Zero Data Retention means OpenAI will not use client HR data for model training—this is critical for compliance.

Step 6: Build Copilot Studio HR Agents

Create three custom agents in Microsoft Copilot Studio: (1) Job Description Generator Agent, (2) Offer Letter Generator Agent, and (3) Onboarding Document Generator Agent. Each agent is grounded on the client's SharePoint document libraries and uses custom instructions (system prompts) that enforce the client's brand voice, formatting standards, and compliance requirements. These agents are published to Microsoft Teams for easy access by HR staff.

1
Access Copilot Studio at https://copilotstudio.microsoft.com and sign in with Global Admin or Copilot Studio Maker credentials.
2
CREATE AGENT 1: Job Description Generator — Click '+ Create' > 'New Agent'
3
Name: 'HR Job Description Generator'
4
Description: 'Generates compliant, on-brand job descriptions based on role requirements'
5
Instructions: paste full system prompt from custom_ai_components section
6
Knowledge Sources: Add SharePoint site 'hr-ai-content' > 'Job Description Templates' and 'Brand Guidelines'
7
Enable 'Allow the AI to use its own general knowledge'
8
Under Topics, create starter prompts: 'Create a job description for [role title] in [department]', 'Update this job description to be more inclusive', 'Convert this internal JD to an external posting'
9
Publish to Microsoft Teams channel: 'HR Team'
10
REPEAT for Agent 2 (Offer Letter Generator) and Agent 3 (Onboarding Document Generator) with their respective system prompts and knowledge sources
Note

Each agent uses approximately 500–2,000 Copilot credits per interaction depending on document length. With a 25,000-credit pack ($200/month), expect capacity for ~500–1,000 document generations per month. Test each agent thoroughly in the Test pane before publishing. Copilot Studio agents require the user to have a Copilot license OR consume from the shared credit pack—verify licensing model with the client.

Step 7: Configure Zapier Integration Workflows

Set up Zapier automations (Zaps) that connect the AI content generation pipeline to the client's ATS, HRIS, e-signature, and document storage systems. Three primary Zaps: (1) New Job Requisition → AI-Generated JD → SharePoint → Approval Notification, (2) Candidate Selected → AI-Generated Offer Letter → DocuSign → HRIS, (3) Offer Accepted → AI-Generated Onboarding Packet → SharePoint → New Hire Email.

Zapier workflow configurations for all three HR automation Zaps
javascript
# ZAP 1: Job Requisition to AI-Generated Job Description
# Trigger: Greenhouse > New Job Opening (or Workable > New Job Created)
# Action 1: Code by Zapier (JavaScript) — Call OpenAI API
#   Input Data: job_title = {{job_title}}, department = {{department}}, 
#              location = {{location}}, employment_type = {{employment_type}}
#   Code: (see custom_ai_components for full implementation)
# Action 2: Microsoft SharePoint > Create File
#   Site: hr-ai-content
#   Library: Generated Documents
#   File Name: JD-{{job_title}}-{{zap_meta_human_now}}.docx
#   File Content: {{output from Action 1}}
# Action 3: Microsoft Teams > Send Channel Message
#   Team: HR Team
#   Channel: Job Description Reviews
#   Message: '📝 New AI-generated JD ready for review: {{job_title}}. Review here: {{sharepoint_url}}'

# ZAP 2: Candidate Selected to AI-Generated Offer Letter
# Trigger: Greenhouse > Candidate Stage Changed (stage = 'Offer')
# Action 1: Greenhouse > Get Candidate Details
# Action 2: BambooHR > Get Compensation Data (via API lookup)
# Action 3: Code by Zapier (JavaScript) — Call OpenAI API for offer letter
# Action 4: DocuSign > Create and Send Envelope
#   Template: Offer Letter Template
#   Recipients: Hiring Manager (signer 1), Candidate (signer 2)
#   Document: {{generated_offer_letter}}
# Action 5: SharePoint > Create File (archive copy)

# ZAP 3: Offer Accepted to Onboarding Packet
# Trigger: DocuSign > Envelope Completed
# Action 1: BambooHR > Get Employee Details
# Action 2: Code by Zapier (JavaScript) — Call OpenAI API for onboarding packet
# Action 3: SharePoint > Create File
# Action 4: Microsoft Outlook > Send Email
#   To: {{new_hire_email}}
#   Subject: 'Welcome to {{company_name}}! Your Onboarding Information'
#   Body: {{onboarding_email_content}}
#   Attachment: {{onboarding_packet}}
Note

Zapier Team plan provides 2,000 tasks/month. Each Zap run that creates one document consumes 3–5 tasks (trigger + multiple actions). For a client generating 100 documents/month, expect ~300–500 tasks/month, well within the Team plan limit. For higher volume clients (staffing agencies generating 500+ JDs/month), upgrade to Zapier Company plan ($506/month for 50,000 tasks). Always test Zaps with sample data before enabling live triggers.

Step 8: Configure DocuSign E-Signature Integration

Set up DocuSign for automated routing of AI-generated offer letters. Create offer letter envelope templates with signature and date fields pre-positioned. Configure the DocuSign-Zapier connection and test the full flow from AI generation through signature completion.

1
Log into DocuSign Admin (admin.docusign.com)
2
Create API integration: Settings > Integrations > API and Keys > Add App/Integration Key. App Name: 'HR AI Content System'. Authentication: JWT Grant. RSA Key Pair: Generate (download private key, store in MSP vault). Redirect URI: https://zapier.com/dashboard/auth/oauth/return/DocusignCLIAPI/
3
Create Offer Letter Template: Templates > New > Start with a Blank Template. Upload a sample AI-generated offer letter. Add Recipient Roles: 'Hiring Manager' (Signer 1), 'Candidate' (Signer 2), 'HR Manager' (CC). Place fields: Signature, Date Signed, Name, Title for each signer. Save template, note the Template ID.
4
In Zapier, connect DocuSign: My Apps > Add Connection > DocuSign. Authenticate with HR Admin's DocuSign credentials. Select the account and grant permissions.
5
Test: Manually trigger Zap 2 with sample candidate data. Verify envelope is created, routed to test signers, and completed envelope archives to SharePoint.
Note

DocuSign Standard plan allows up to 100 envelopes per user per year. For staffing agencies sending 50+ offers per month, upgrade to Business Pro ($65/user/month). Configure envelope expiration to 7 days with automatic reminders at day 3 and day 5. Enable DocuSign Connect webhook to trigger the onboarding Zap automatically when an envelope is completed.

Step 9: Deploy Bias Detection and Compliance Layer

Implement automated bias detection on all AI-generated content before it reaches human reviewers. This layer uses a combination of the OpenAI API with a bias-checking prompt and (optionally) Textio for advanced inclusive language analysis. Configure compliance logging that documents the AI tools used, the prompts submitted, and the human review status—required for NYC Local Law 144, Illinois HB 3773, and Colorado AI Act compliance.

Create a SharePoint list for compliance logging
powershell
# Create a SharePoint list for compliance logging
Connect-PnPOnline -Url https://clientdomain.sharepoint.com/sites/hr-ai-content -Interactive

New-PnPList -Title 'AI Compliance Log' -Template GenericList

Add-PnPField -List 'AI Compliance Log' -DisplayName 'Document ID' -InternalName 'DocID' -Type Text
Add-PnPField -List 'AI Compliance Log' -DisplayName 'Document Type' -InternalName 'DocType' -Type Choice -Choices 'Job Description','Offer Letter','Onboarding Document'
Add-PnPField -List 'AI Compliance Log' -DisplayName 'AI Model Used' -InternalName 'AIModel' -Type Text
Add-PnPField -List 'AI Compliance Log' -DisplayName 'Prompt Hash' -InternalName 'PromptHash' -Type Text
Add-PnPField -List 'AI Compliance Log' -DisplayName 'Bias Score' -InternalName 'BiasScore' -Type Number
Add-PnPField -List 'AI Compliance Log' -DisplayName 'Bias Issues Found' -InternalName 'BiasIssues' -Type Note
Add-PnPField -List 'AI Compliance Log' -DisplayName 'Human Reviewer' -InternalName 'HumanReviewer' -Type Text
Add-PnPField -List 'AI Compliance Log' -DisplayName 'Review Status' -InternalName 'ReviewStatus' -Type Choice -Choices 'Pending Review','Approved','Rejected','Approved with Edits'
Add-PnPField -List 'AI Compliance Log' -DisplayName 'Review Date' -InternalName 'ReviewDate' -Type DateTime
Add-PnPField -List 'AI Compliance Log' -DisplayName 'Generation Timestamp' -InternalName 'GenTimestamp' -Type DateTime
Note

The compliance log is critical for clients operating in NYC (Local Law 144 penalties: $500–$1,500/day), Illinois (HB 3773 effective Jan 1, 2026), or Colorado (SB 24-205 effective June 30, 2026). Even for clients not yet subject to these laws, implementing logging now future-proofs the solution. For clients requiring formal bias audits, partner with a third-party auditor or use Textio's analytics dashboard as audit evidence. Retain compliance logs for a minimum of 4 years per EEOC record-keeping requirements.

Step 10: Build Power Automate Approval Workflows

Create Power Automate flows that enforce human-in-the-loop review for all AI-generated documents. When a new document lands in the SharePoint 'Generated Documents' library, an approval request is automatically sent to the designated reviewer (HR Manager for JDs, HR Manager + Legal for offer letters). Only approved documents proceed to publishing or sending.

1
Go to https://make.powerautomate.com
2
Create new Automated Cloud Flow
3
Trigger: 'When a file is created (properties only)' - SharePoint | Site: hr-ai-content | Library: Generated Documents | Folder: /Generated Documents
4
Condition: DocType equals 'Job Description'
5
Action: 'Start and wait for an approval' | Approval type: Approve/Reject - First to respond | Title: 'Review AI-Generated JD: [Document Name]' | Assigned to: hr-manager@clientdomain.com | Details: 'An AI-generated job description is ready for your review. Please check for accuracy, brand voice, and compliance before approving.' | Item link: [SharePoint document URL]
6
Condition: Outcome equals 'Approve' → Yes: Update file metadata - Status = 'Approved'; Update SharePoint List Item in AI Compliance Log - ReviewStatus = 'Approved', HumanReviewer = [Approver Name] → No: Update file metadata - Status = 'Rejected'; Send email to document creator with rejection comments
7
REPEAT with additional approvers for Offer Letters (HR Manager + Legal)
8
REPEAT for Onboarding Documents (HR Manager only)
Note

Power Automate is included in the M365 E3 license at no additional cost. For multi-level approvals (e.g., offer letters requiring both HR and Legal sign-off), use 'Approve/Reject - Everyone must approve' type. Set approval timeout to 48 hours with escalation to the HR Director. Consider creating a Power Automate desktop flow for users who prefer to trigger generation from a button rather than relying on ATS triggers.

Step 11: End-to-End Testing and Bias Audit

Execute comprehensive testing across all three document generation workflows. Test with realistic data covering diverse job types, departments, seniority levels, and locations. Perform a bias audit on generated job descriptions using both the automated bias detection prompt and manual review by HR and Legal stakeholders. Document all test results in the compliance log.

  • JD Generation Tests (minimum 10): Entry-level role (e.g., Customer Service Representative), Mid-level role (e.g., Marketing Manager), Senior/Executive role (e.g., VP of Engineering), Technical role (e.g., Data Engineer), Non-technical role (e.g., Office Administrator), Remote position, Multi-location position, Contract/temporary position, Bilingual requirement position, Role with physical requirements (test ADA compliance)
  • Offer Letter Tests (minimum 5): Standard full-time offer, Part-time offer with different benefits, Executive offer with equity/bonus, Contractor offer (1099), Remote worker in different state (verify state-specific language)
  • Onboarding Packet Tests (minimum 3): Standard new hire, Rehire, Intern/temporary worker
  • Bias Audit: Run all 10 JDs through the bias detection prompt
  • Document results in the AI Compliance Log SharePoint list
  • Flag any JDs scoring below 85/100 for manual revision
Note

Testing should involve actual HR staff as testers to validate realism and usability. Schedule a 2-hour UAT session with the HR Manager and lead Recruiter. Have Legal review at least 3 offer letter samples for jurisdictional compliance. Do NOT skip the bias audit—this is the client's primary legal risk vector. Any bias issues found during testing should be resolved by adjusting the system prompts before go-live.

Step 12: User Training and Go-Live

Conduct hands-on training sessions for all HR staff who will use the system. Cover: accessing Copilot Studio agents via Teams, triggering automated workflows, reviewing and editing AI-generated content, using the approval workflow, understanding bias detection results, and the compliance logging process. Deploy to production with a 2-week supervised period where MSP monitors all generated content.

  • Training Agenda (2-hour session, split across 2 days)
  • Day 1 (1 hour): Demo: Generating a JD via Teams Copilot Studio agent (15 min) | Hands-on: Each user generates a JD for a real open role (20 min) | Demo: Reviewing and editing AI output, approval workflow (15 min) | Q&A (10 min)
  • Day 2 (1 hour): Demo: Offer letter generation triggered from ATS (15 min) | Demo: Onboarding packet generation (10 min) | Hands-on: Users process a sample candidate through full pipeline (20 min) | Review: Compliance logging, bias detection, escalation procedures (10 min) | Go-live announcement and support contact info (5 min)
  • Post-training: Share recorded sessions via SharePoint
  • Create quick-reference cards (1-page PDFs) for each workflow
  • Enable the Copilot Studio agents in the production Teams channels
Note

Record all training sessions and upload to the HR AI Content Hub SharePoint site. Create 1-page quick reference guides for each workflow (JD, Offer Letter, Onboarding). Establish a dedicated Teams channel 'AI Content Support' where users can ask questions during the 2-week supervised period. MSP should check the compliance log daily during the first 2 weeks to verify human review is happening. Plan a 30-minute check-in call at the end of week 1 and week 2.

Custom AI Components

Job Description Generator System Prompt

Type: prompt Master system prompt used in both the Copilot Studio JD Agent and the OpenAI API Zapier integration. This prompt enforces the client's brand voice, structural format, inclusivity requirements, and compliance guardrails. It generates complete, ATS-optimized job descriptions from minimal input (job title, department, level, location). Implementation:

Job Description Generator - System Prompt

You are an expert HR content writer for {{COMPANY_NAME}}. Your role is to generate professional, compliant, and inclusive job descriptions that attract diverse, qualified candidates. ## COMPANY CONTEXT - Company: {{COMPANY_NAME}} - Industry: {{INDUSTRY}} - Company Size: {{COMPANY_SIZE}} employees - Brand Voice: {{BRAND_VOICE_DESCRIPTION}} (e.g., "Professional yet approachable, innovation-focused, emphasizing collaboration and growth") - Headquarters: {{HQ_LOCATION}} ## OUTPUT FORMAT Every job description MUST follow this exact structure: ### [Job Title] **Department:** [Department Name] **Location:** [Location / Remote / Hybrid] **Employment Type:** [Full-time / Part-time / Contract] **Reports To:** [Manager Title] **Salary Range:** [Range - MUST include if required by state law] #### About {{COMPANY_NAME}} [2-3 sentences about the company, its mission, and why it's a great place to work] #### About the Role [3-4 sentences describing the role, its impact, and why it matters] #### What You'll Do [6-10 bullet points of key responsibilities, starting with action verbs] #### What You Bring **Required:** [4-6 bullet points of genuinely required qualifications] **Preferred:** [3-5 bullet points of nice-to-have qualifications] #### What We Offer [4-6 bullet points of benefits and perks] #### Equal Opportunity Statement [Standard EEO statement] ## INCLUSIVITY RULES (MANDATORY) 1. NEVER use gendered language (he/she, manpower, chairman). Use "you", "they", or role-specific terms. 2. NEVER use age-coded language ("digital native", "young and energetic", "seasoned"). 3. NEVER use ability-coded language unless it is a bona fide occupational qualification ("must be able to stand for 8 hours" only if truly required, with note about reasonable accommodations). 4. NEVER use unnecessary jargon, acronyms without definition, or "culture fit" language ("rockstar", "ninja", "guru"). 5. ALWAYS separate "Required" from "Preferred" qualifications. Limit Required to genuinely essential items. 6. ALWAYS use years of experience as ranges ("3-5 years") not minimums ("5+ years") to avoid age discrimination signals. 7. ALWAYS include salary range if the position is in CO, CA, NY, WA, CT, MD, NV, RI, or any other pay transparency jurisdiction. 8. ALWAYS include the EEO statement. 9. ALWAYS include a reasonable accommodations statement: "{{COMPANY_NAME}} is committed to providing reasonable accommodations for qualified individuals with disabilities. If you need assistance or accommodation, please contact [HR email]." 10. Aim for a Flesch-Kincaid reading level of 8th-10th grade for maximum accessibility. ## COMPLIANCE GUARDRAILS - If the user asks you to include discriminatory requirements, REFUSE and explain why. - If the user asks you to omit salary in a pay-transparency jurisdiction, WARN them and include it. - If the user provides physical requirements, ALWAYS add: "Reasonable accommodations may be made to enable individuals with disabilities to perform essential functions." - NEVER fabricate specific benefits, compensation numbers, or company facts. If unsure, insert [PLACEHOLDER: verify with HR]. ## KNOWLEDGE GROUNDING When available, reference the uploaded company documents to: - Match existing JD formatting and style - Use accurate benefit descriptions from the employee handbook - Align with the company's published values and mission - Use correct department names and reporting structures from the org chart ## RESPONSE BEHAVIOR 1. Ask clarifying questions if the job title alone is ambiguous 2. After generating, provide a self-assessment: rate the JD's inclusivity on a 1-10 scale and flag any areas for improvement 3. If the user says "make it shorter" or "make it longer", adjust while maintaining all required sections 4. Always end with: "⚠️ This is an AI-generated draft. Please review for accuracy, especially compensation details, reporting structure, and legal compliance, before publishing."
Sonnet 4.6

Offer Letter Generator System Prompt

Type: prompt System prompt for generating personalized offer letters from candidate and compensation data. Enforces legal requirements for the specific state/jurisdiction, includes all mandatory disclosures, and follows the client's established offer letter format.

Implementation:

Offer Letter Generator - System Prompt

You are an HR document specialist for {{COMPANY_NAME}}. You generate professional, legally compliant offer letters based on candidate and position data provided to you. ## INPUT DATA YOU WILL RECEIVE - Candidate Name - Position Title - Department - Start Date - Employment Type (Full-time, Part-time, Contract) - Compensation (salary, hourly rate, or contract rate) - Bonus/Commission structure (if applicable) - Equity/Stock Options (if applicable) - Benefits Eligibility Date - Reporting Manager Name and Title - Work Location (office, remote, hybrid) - State/Jurisdiction of employment ## OUTPUT FORMAT [{{COMPANY_NAME}} Letterhead] [Date] Dear [Candidate Name], We are thrilled to extend the following offer of employment: **Position:** [Title] **Department:** [Department] **Reports To:** [Manager Name, Title] **Start Date:** [Date] **Employment Type:** [Type] **Work Location:** [Location] **Compensation:** - Base Salary: $[Amount] per [year/hour], paid [bi-weekly/semi-monthly/monthly] - [Bonus structure if applicable] - [Commission structure if applicable] - [Equity/Stock if applicable] **Benefits:** [List benefits with eligibility dates, pulled from company benefits documentation] **At-Will Employment:** [At-will statement appropriate to jurisdiction] **Contingencies:** This offer is contingent upon: - Satisfactory completion of a background check - Verification of employment eligibility (I-9) - [Any additional contingencies] **Additional Terms:** [Non-compete/non-solicitation notice if applicable - flag jurisdiction restrictions] [Arbitration agreement notice if applicable] **Acceptance:** Please indicate your acceptance by signing below and returning this letter by [deadline date - typically 5 business days]. We look forward to welcoming you to the {{COMPANY_NAME}} team! Sincerely, [HR Manager Name] [Title] {{COMPANY_NAME}} --- ACCEPTED AND AGREED: Signature: ___________________ Printed Name: [Candidate Name] Date: ___________________ ## JURISDICTION-SPECIFIC RULES - **California:** Include notice that non-compete clauses are unenforceable. Include pay transparency notice. - **New York:** Include pay range for the position. Include notice of right to discuss compensation. - **Colorado:** Include salary range. Note: cannot require non-competes for employees earning below threshold. - **Washington:** Include pay range and benefits description. - **Illinois:** Include pay scale and benefits by Jan 1, 2025 requirement. - **All states:** Include at-will employment language (except Montana). - **Montana:** Use "good cause" termination language. ## MANDATORY RULES 1. NEVER fabricate compensation numbers. If not provided, insert [PLACEHOLDER: INSERT SALARY]. 2. NEVER include non-compete clauses for California-based employees. 3. ALWAYS include at-will language (or good-cause for Montana). 4. ALWAYS include background check contingency. 5. ALWAYS include I-9 verification requirement. 6. ALWAYS note that benefits summaries are not contractual guarantees and direct to full plan documents. 7. ALWAYS include acceptance deadline. 8. ALWAYS end with: "⚠️ AI-GENERATED DRAFT - Must be reviewed by HR and Legal before sending to candidate." 9. If equity or stock options are mentioned, add: "Details of equity grants will be provided in a separate Equity Agreement."
Sonnet 4.6

Onboarding Document Generator System Prompt

Type: prompt System prompt for generating personalized onboarding packets including welcome letters, first-week schedules, IT setup instructions, benefits enrollment guides, and policy acknowledgment checklists. Adapts based on role type, department, and location.

Implementation:

Onboarding Document Generator - System Prompt

You are an onboarding experience designer for {{COMPANY_NAME}}. You create warm, comprehensive, and organized onboarding documents that help new hires feel welcomed and prepared. ## INPUT DATA YOU WILL RECEIVE - New Hire Name - Position Title - Department - Start Date - Manager Name - Work Location (office address, remote, hybrid) - Employment Type - Buddy/Mentor Name (if assigned) ## DOCUMENTS TO GENERATE Generate the following as a single organized packet: ### 1. Welcome Letter - Warm, enthusiastic tone matching {{COMPANY_NAME}} brand voice - Brief mention of team they're joining and their manager - What to expect on Day 1 - Key contacts (HR, Manager, IT, Buddy) ### 2. First Week Schedule Create a detailed schedule: **Day 1:** - Arrival time and location/login instructions - IT setup and equipment distribution - HR orientation (benefits enrollment, policy review, I-9 completion) - Team lunch/virtual meet-and-greet - Manager 1:1 **Day 2-3:** - Department-specific onboarding sessions - Systems and tools training - Key stakeholder introductions - Initial project/task assignments **Day 4-5:** - Continued training - Buddy check-in - 30/60/90 day goal-setting with manager - End-of-week check-in with HR ### 3. Pre-Start Checklist Items the new hire should complete before Day 1: - [ ] Return signed offer letter - [ ] Complete background check authorization - [ ] Fill out new hire paperwork (link to HRIS portal) - [ ] Provide documents for I-9 verification - [ ] Complete direct deposit enrollment - [ ] Review employee handbook - [ ] Set up company email/accounts (if credentials sent early) - [ ] Join team Slack/Teams channel (link provided) ### 4. Benefits Enrollment Guide - Benefits eligibility date - Enrollment deadline - Summary of available plans (medical, dental, vision, 401k, etc.) - reference company documentation - How to enroll (link to benefits portal) - Key contacts for benefits questions ### 5. Policy Acknowledgment Checklist - [ ] Employee Handbook acknowledgment - [ ] Code of Conduct - [ ] IT Acceptable Use Policy - [ ] Data Privacy and Security Policy - [ ] Anti-Harassment Policy - [ ] [Industry-specific policies] ## ADAPTATION RULES - **Remote employees:** Replace physical arrival instructions with virtual onboarding equivalents. Include equipment shipping details placeholder. Add home office setup guide. - **Contractors/Temp workers:** Simplify benefits section. Adjust policy list. Note contract end date. - **Executives:** Add board introduction schedule. Include strategic planning sessions. More detailed 90-day plan. - **Interns:** Add internship program overview, project assignments, and mentor meeting schedule. ## TONE AND STYLE - Warm and welcoming, not corporate-stiff - Use the new hire's first name throughout - Include relevant emoji sparingly for visual appeal (📋 ✅ 👋 📅) - Keep paragraphs short and scannable - Use bullet points and checklists extensively ## MANDATORY RULES 1. NEVER include actual passwords, SSNs, or sensitive PII in the document. 2. ALWAYS include placeholder links: [LINK: HRIS Portal], [LINK: Benefits Enrollment], etc. 3. ALWAYS include I-9 verification requirement. 4. ALWAYS note: "Please complete all pre-start items by [date - 3 business days before start date]." 5. ALWAYS end with: "⚠️ AI-GENERATED DRAFT - HR should verify all dates, links, contacts, and policy documents before sending."
Sonnet 4.6

Bias Detection Analysis Prompt

Type: prompt A specialized prompt that analyzes AI-generated job descriptions for bias across gender, age, race, disability, and other protected classes. Returns a structured score and specific actionable recommendations. Used as a second-pass quality check in the Zapier workflow.

Implementation:

Called via OpenAI API after initial JD generation. Returns structured JSON for automated processing.

Bias Detection Analysis Prompt

SYSTEM PROMPT: You are an expert in employment law, DEI, and inclusive hiring practices. Your job is to analyze job descriptions for bias and compliance issues. You must be thorough, specific, and actionable. Analyze the provided job description and return a JSON object with the following structure: { "overall_score": <number 1-100>, "gender_bias": { "score": <number 1-100>, "issues": ["specific phrase or pattern found"], "suggestions": ["specific replacement or fix"] }, "age_bias": { "score": <number 1-100>, "issues": ["specific phrase or pattern found"], "suggestions": ["specific replacement or fix"] }, "racial_ethnic_bias": { "score": <number 1-100>, "issues": ["specific phrase or pattern found"], "suggestions": ["specific replacement or fix"] }, "disability_bias": { "score": <number 1-100>, "issues": ["specific phrase or pattern found"], "suggestions": ["specific replacement or fix"] }, "socioeconomic_bias": { "score": <number 1-100>, "issues": ["specific phrase or pattern found"], "suggestions": ["specific replacement or fix"] }, "readability": { "flesch_kincaid_estimate": <grade level number>, "issues": ["jargon or complex language found"], "suggestions": ["plain language replacement"] }, "legal_compliance": { "eeo_statement_present": <boolean>, "accommodations_statement_present": <boolean>, "salary_range_present": <boolean>, "at_will_mentioned": <boolean>, "issues": ["missing required elements"], "suggestions": ["what to add"] }, "summary": "2-3 sentence overall assessment", "priority_fixes": ["top 3 most impactful changes to make"] } ## BIAS INDICATORS TO CHECK ### Gender Bias - Masculine-coded words: aggressive, ambitious, dominant, competitive, decisive, determined, ninja, rockstar, guru, hacker - Feminine-coded words: collaborative, nurturing, supportive, understanding (when overused) - Gendered pronouns: he/she, him/her (use they/them or you) - Gendered titles: chairman, manpower, salesman ### Age Bias - "Digital native", "tech-savvy" (assumes younger) - "10+ years experience" (may signal age preference - suggest ranges) - "Recent graduate", "entry-level" when paired with experience requirements - "Energetic", "fresh perspective" (youth-coded) - "Seasoned", "mature" (age-coded) - Cultural references to specific generations ### Racial/Ethnic Bias - "Culture fit" (can mask racial preference - suggest "culture add") - "Native English speaker" (suggest "fluent in English") - "Professional appearance" (can be racially coded) - Unnecessary location restrictions that limit diversity ### Disability Bias - Physical requirements not justified as essential functions - "Must be able to lift 50 lbs" without accommodation note - "Fast-paced environment" as an exclusionary signal - Missing reasonable accommodation statement ### Socioeconomic Bias - Requiring specific university degrees when not necessary - "Must have own vehicle" when not job-essential - Unpaid internship requirements in background - Excessive credential requirements Return ONLY the JSON object, no additional text.
Sonnet 4.6

Zapier OpenAI JD Generation Code Step

Type: integration JavaScript code for the Zapier 'Code by Zapier' action that calls the OpenAI GPT-4.1 API to generate a job description and then runs it through bias detection. This is the core integration code that connects the ATS trigger to the AI content generation. Implementation:

Zapier Code by Zapier step
javascript
// calls OpenAI GPT-4.1 to generate a job description and run bias detection

// Zapier Code Step: Generate Job Description via OpenAI API
// Trigger provides: inputData.job_title, inputData.department, 
// inputData.location, inputData.employment_type, inputData.level,
// inputData.reports_to, inputData.salary_range, inputData.special_requirements

const OPENAI_API_KEY = inputData.openai_api_key; // Stored as Zapier secret
const COMPANY_NAME = inputData.company_name || 'Acme Corp';

// Step 1: Generate the Job Description
const jdSystemPrompt = `You are an expert HR content writer for ${COMPANY_NAME}. Generate a complete, inclusive, ATS-optimized job description following this exact structure:

### [Job Title]
**Department:** [Department]
**Location:** [Location]
**Employment Type:** [Type]
**Reports To:** [Manager Title]
**Salary Range:** [Range]

#### About ${COMPANY_NAME}
[2-3 sentences]

#### About the Role
[3-4 sentences]

#### What You'll Do
[6-10 bullet points with action verbs]

#### What You Bring
**Required:**
[4-6 items]

**Preferred:**
[3-5 items]

#### What We Offer
[4-6 bullet points]

#### Equal Opportunity Statement
${COMPANY_NAME} is an equal opportunity employer. We celebrate diversity and are committed to creating an inclusive environment for all employees. We do not discriminate based on race, religion, color, national origin, gender, sexual orientation, age, marital status, veteran status, or disability status.

If you need assistance or a reasonable accommodation during the application process, please contact hr@${COMPANY_NAME.toLowerCase().replace(/\s+/g, '')}.com.

RULES: No gendered language. No age-coded words. Use experience ranges not minimums. Include salary if location requires pay transparency. Flesch-Kincaid 8th-10th grade level.`;

const jdUserPrompt = `Generate a job description for:
- Title: ${inputData.job_title}
- Department: ${inputData.department}
- Location: ${inputData.location}
- Employment Type: ${inputData.employment_type || 'Full-time'}
- Level: ${inputData.level || 'Mid-level'}
- Reports To: ${inputData.reports_to || '[Hiring Manager]'}
- Salary Range: ${inputData.salary_range || '[PLACEHOLDER: Add salary range]'}
- Special Requirements: ${inputData.special_requirements || 'None'}`;

const jdResponse = await fetch('https://api.openai.com/v1/chat/completions', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': `Bearer ${OPENAI_API_KEY}`
  },
  body: JSON.stringify({
    model: 'gpt-4.1',
    messages: [
      { role: 'system', content: jdSystemPrompt },
      { role: 'user', content: jdUserPrompt }
    ],
    max_tokens: 2000,
    temperature: 0.7,
    store: false
  })
});

const jdData = await jdResponse.json();
const generatedJD = jdData.choices[0].message.content;

// Step 2: Run Bias Detection
const biasSystemPrompt = `You are an employment bias detection expert. Analyze the following job description and return ONLY a JSON object with: overall_score (1-100, 100=no bias), issues (array of specific problems found), priority_fixes (top 3 changes), and pass (boolean, true if score >= 85).`;

const biasResponse = await fetch('https://api.openai.com/v1/chat/completions', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': `Bearer ${OPENAI_API_KEY}`
  },
  body: JSON.stringify({
    model: 'gpt-4.1',
    messages: [
      { role: 'system', content: biasSystemPrompt },
      { role: 'user', content: `Analyze this job description for bias:\n\n${generatedJD}` }
    ],
    max_tokens: 1000,
    temperature: 0.2,
    store: false
  })
});

const biasData = await biasResponse.json();
const biasAnalysis = biasData.choices[0].message.content;

let biasScore = 0;
let biasPass = false;
try {
  const parsed = JSON.parse(biasAnalysis);
  biasScore = parsed.overall_score || 0;
  biasPass = parsed.pass || (biasScore >= 85);
} catch(e) {
  biasScore = 0;
  biasPass = false;
}

output = {
  generated_jd: generatedJD,
  bias_analysis: biasAnalysis,
  bias_score: biasScore,
  bias_pass: biasPass,
  job_title: inputData.job_title,
  department: inputData.department,
  generation_timestamp: new Date().toISOString(),
  model_used: 'gpt-4.1',
  doc_type: 'Job Description'
};

Zapier Offer Letter Generation Code Step

Type: integration JavaScript code for the Zapier 'Code by Zapier' action that generates a personalized offer letter from candidate and compensation data pulled from the ATS and HRIS.

Implementation:

Zapier Code Step: Generate Offer Letter via OpenAI API
javascript
// Zapier Code Step: Generate Offer Letter via OpenAI API
// Input data from prior Zapier steps (Greenhouse candidate data + BambooHR compensation data)

const OPENAI_API_KEY = inputData.openai_api_key;
const COMPANY_NAME = inputData.company_name || 'Acme Corp';

const systemPrompt = `You are an HR document specialist for ${COMPANY_NAME}. Generate a professional, legally compliant offer letter.

FORMAT:
- Use formal business letter format
- Include all compensation details clearly
- Include at-will employment language (unless Montana)
- Include background check and I-9 contingencies
- Include acceptance signature block
- For CA employees: note non-competes are unenforceable
- For NY/CO/WA/CT employees: include pay range
- Add benefits summary referencing full plan documents
- End with: "⚠️ AI-GENERATED DRAFT - Must be reviewed by HR and Legal before sending."

NEVER fabricate compensation numbers. Use only the data provided.`;

const userPrompt = `Generate an offer letter with these details:
- Candidate Name: ${inputData.candidate_name}
- Position: ${inputData.position_title}
- Department: ${inputData.department}
- Start Date: ${inputData.start_date}
- Employment Type: ${inputData.employment_type || 'Full-time'}
- Base Salary: ${inputData.salary}
- Pay Frequency: ${inputData.pay_frequency || 'Semi-monthly'}
- Bonus: ${inputData.bonus || 'N/A'}
- Equity: ${inputData.equity || 'N/A'}
- Benefits Eligibility: ${inputData.benefits_date || 'First day of month following 30 days of employment'}
- Reports To: ${inputData.manager_name}, ${inputData.manager_title}
- Work Location: ${inputData.work_location}
- State/Jurisdiction: ${inputData.state}
- Response Deadline: ${inputData.deadline || '5 business days from receipt'}
- Additional Terms: ${inputData.additional_terms || 'None'}`;

const response = await fetch('https://api.openai.com/v1/chat/completions', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': `Bearer ${OPENAI_API_KEY}`
  },
  body: JSON.stringify({
    model: 'gpt-4.1',
    messages: [
      { role: 'system', content: systemPrompt },
      { role: 'user', content: userPrompt }
    ],
    max_tokens: 2500,
    temperature: 0.4,
    store: false
  })
});

const data = await response.json();
const generatedLetter = data.choices[0].message.content;

output = {
  offer_letter: generatedLetter,
  candidate_name: inputData.candidate_name,
  position_title: inputData.position_title,
  generation_timestamp: new Date().toISOString(),
  model_used: 'gpt-4.1',
  doc_type: 'Offer Letter',
  state: inputData.state
};

Onboarding Packet Generation Code Step

Type: integration JavaScript code for generating personalized onboarding packets triggered by DocuSign envelope completion (offer acceptance). Pulls new hire data from HRIS and generates a comprehensive onboarding packet.

Implementation

Zapier Code Step: Generate Onboarding Packet via OpenAI API — Triggered after DocuSign offer letter is completed (signed by candidate)
javascript
// Zapier Code Step: Generate Onboarding Packet via OpenAI API
// Triggered after DocuSign offer letter is completed (signed by candidate)

const OPENAI_API_KEY = inputData.openai_api_key;
const COMPANY_NAME = inputData.company_name || 'Acme Corp';

const systemPrompt = `You are an onboarding experience designer for ${COMPANY_NAME}. Create a warm, comprehensive onboarding packet.

GENERATE ALL OF THESE SECTIONS:

1. **Welcome Letter** - Warm, enthusiastic, mentions their team and manager
2. **First Week Schedule** - Day-by-day with times (Day 1-5)
3. **Pre-Start Checklist** - Items to complete before Day 1 with checkboxes
4. **Benefits Enrollment Guide** - Summary with enrollment deadline
5. **Policy Acknowledgment List** - Policies they must review and sign
6. **Key Contacts** - HR, Manager, IT Help Desk, Buddy/Mentor
7. **IT Setup Instructions** - Account access, required software, VPN if remote

ADAPTATION:
- Remote employees: virtual onboarding equivalents, equipment shipping info
- Contractors: simplified benefits, note contract end date
- Include [PLACEHOLDER] tags for any links, passwords, or specific details HR must fill in.
- Tone: warm, welcoming, use first name, light emoji usage
- End with: "⚠️ AI-GENERATED DRAFT - HR should verify all dates, links, contacts, and policy documents before sending."`;

const userPrompt = `Generate an onboarding packet for:
- New Hire Name: ${inputData.new_hire_name}
- Position: ${inputData.position_title}
- Department: ${inputData.department}
- Start Date: ${inputData.start_date}
- Manager: ${inputData.manager_name}
- Work Location: ${inputData.work_location}
- Employment Type: ${inputData.employment_type || 'Full-time'}
- Buddy/Mentor: ${inputData.buddy_name || '[To be assigned]'}
- IT Equipment: ${inputData.equipment_notes || 'Standard laptop and peripherals'}`;

const response = await fetch('https://api.openai.com/v1/chat/completions', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': `Bearer ${OPENAI_API_KEY}`
  },
  body: JSON.stringify({
    model: 'gpt-4.1',
    messages: [
      { role: 'system', content: systemPrompt },
      { role: 'user', content: userPrompt }
    ],
    max_tokens: 3500,
    temperature: 0.6,
    store: false
  })
});

const data = await response.json();
const onboardingPacket = data.choices[0].message.content;

// Also generate a short welcome email body
const emailResponse = await fetch('https://api.openai.com/v1/chat/completions', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': `Bearer ${OPENAI_API_KEY}`
  },
  body: JSON.stringify({
    model: 'gpt-4.1',
    messages: [
      { role: 'system', content: `Write a brief, warm welcome email (3-4 paragraphs) from HR at ${COMPANY_NAME} to a new hire. Let them know their onboarding packet is attached and highlight the most important pre-start tasks. Use their first name.` },
      { role: 'user', content: `New hire: ${inputData.new_hire_name}, starting ${inputData.start_date} as ${inputData.position_title}. Manager: ${inputData.manager_name}.` }
    ],
    max_tokens: 500,
    temperature: 0.7,
    store: false
  })
});

const emailData = await emailResponse.json();
const welcomeEmail = emailData.choices[0].message.content;

output = {
  onboarding_packet: onboardingPacket,
  welcome_email_body: welcomeEmail,
  new_hire_name: inputData.new_hire_name,
  position_title: inputData.position_title,
  start_date: inputData.start_date,
  generation_timestamp: new Date().toISOString(),
  model_used: 'gpt-4.1',
  doc_type: 'Onboarding Document'
};

Power Automate Compliance Logger

Type: workflow Power Automate cloud flow that automatically logs every AI-generated document to the SharePoint AI Compliance Log list. Triggered whenever a new file is added to the Generated Documents library. Captures the document type, AI model used, bias score, generation timestamp, and sets the initial review status to 'Pending Review'. Required for regulatory compliance in NYC, Illinois, and Colorado jurisdictions.

Implementation:

Power Automate Flow: AI Compliance Auto-Logger
plaintext
# Power Automate Flow: AI Compliance Auto-Logger
# Type: Automated Cloud Flow

## Trigger
- **When a file is created (properties only)** - SharePoint
  - Site Address: https://clientdomain.sharepoint.com/sites/hr-ai-content
  - Library Name: Generated Documents

## Actions

### 1. Get file properties
- **Get file properties** - SharePoint
  - Site: hr-ai-content
  - Library: Generated Documents  
  - Id: triggerOutputs()?['body/ID']

### 2. Create compliance log entry
- **Create item** - SharePoint
  - Site: hr-ai-content
  - List: AI Compliance Log
  - Fields:
    - DocID: concat('DOC-', formatDateTime(utcNow(), 'yyyyMMdd-HHmmss'))
    - DocType: outputs('Get_file_properties')?['body/DocType/Value']
    - AIModel: 'gpt-4.1'
    - PromptHash: '' (populated by Zapier metadata if available)
    - BiasScore: outputs('Get_file_properties')?['body/BiasScore'] (if available from Zapier)
    - BiasIssues: '' (populated after bias review)
    - HumanReviewer: '' (populated after approval workflow)
    - ReviewStatus: 'Pending Review'
    - ReviewDate: null
    - GeneratedDate: utcNow()

### 3. Send notification
- **Post message in a chat or channel** - Microsoft Teams
  - Post in: Channel
  - Team: HR Team
  - Channel: AI Content Reviews
  - Message: 
        📋 **New AI-Generated Document Logged**
    - Type: @{outputs('Get_file_properties')?['body/DocType/Value']}
    - File: @{outputs('Get_file_properties')?['body/{FilenameWithExtension}']}
    - Compliance ID: @{outputs('Create_item')?['body/DocID']}
    - Status: Pending Review
    
    Please review and approve via the SharePoint approval workflow.
    
### Error Handling
- **Configure run after** on each action to handle failures
- **Scope** wrapping all actions with a catch that sends failure notification to MSP admin email
- Retry policy: Fixed interval, 3 retries, 5-minute intervals

## Notes
- This flow runs on the standard Power Automate connector included with M365 E3
- No premium connectors required
- Expected volume: 50-200 runs/month for typical client
- Retention: Set SharePoint list view to archive items older than 4 years (EEOC requirement)

Testing & Validation

  • TEST 1 - JD Generation via Copilot Studio: Open Microsoft Teams, navigate to the HR Team channel, invoke the Job Description Generator agent with the prompt 'Create a job description for a Senior Software Engineer in the Engineering department, located in New York, NY, hybrid work'. Verify the output includes all required sections (About, What You'll Do, What You Bring with Required/Preferred split, What We Offer, EEO statement, accommodations statement), includes a salary range (required for NY), uses no gendered language, and ends with the AI-generated draft disclaimer.
  • TEST 2 - JD Generation via Zapier Pipeline: Create a test job opening in the ATS (Greenhouse/Workable) with title 'Marketing Manager', department 'Marketing', location 'Denver, CO'. Verify the Zapier trigger fires, the OpenAI API generates a JD, the bias detection runs and returns a score ≥85, the document is saved to the SharePoint 'Generated Documents' library with correct metadata, and a Teams notification is posted to the review channel.
  • TEST 3 - Bias Detection Accuracy: Submit three intentionally biased JDs through the bias detection prompt: (1) a JD with gendered language ('he will manage', 'manpower'), (2) a JD with age-coded language ('digital native', 'recent graduate preferred, 10+ years experience'), (3) a JD with disability bias ('must be able to lift 50 lbs' without accommodation statement). Verify each returns a score below 70 and identifies the specific biased phrases with actionable replacement suggestions.
  • TEST 4 - Offer Letter Generation End-to-End: In the ATS, move a test candidate to the 'Offer' stage with salary $95,000/year, start date 30 days from now, in California. Verify: Zapier triggers, offer letter is generated with correct candidate name and salary, California-specific language is included (non-compete unenforceability notice), at-will language is present, DocuSign envelope is created with correct signature fields, and the document archives to SharePoint.
  • TEST 5 - DocuSign Routing: Using the test offer letter from Test 4, verify the DocuSign envelope routes first to the Hiring Manager (Signer 1), then to the candidate (Signer 2), and HR Manager is CC'd. Verify signing works on both desktop and mobile. Verify the completed envelope triggers the onboarding Zap.
  • TEST 6 - Onboarding Packet Generation: After the DocuSign envelope from Test 5 completes, verify the onboarding Zap fires and generates a complete packet including: welcome letter, 5-day first-week schedule, pre-start checklist, benefits enrollment guide, policy acknowledgment list, key contacts, and IT setup instructions. Verify the packet is saved to SharePoint and a welcome email is sent to the new hire's email address with the packet attached.
  • TEST 7 - Power Automate Approval Workflow: Upload a test JD to the 'Generated Documents' SharePoint library. Verify the approval request is sent to the HR Manager's email and Teams. Test the Approve path (verify status updates to 'Approved' and compliance log is updated). Test the Reject path (verify status updates to 'Rejected' and rejection notification with comments is sent to the document creator).
  • TEST 8 - Compliance Logging: After running Tests 2-6, navigate to the 'AI Compliance Log' SharePoint list and verify that each generated document has a corresponding log entry with: unique Document ID, correct Document Type, AI Model 'gpt-4.1', generation timestamp, and initial Review Status of 'Pending Review'. Verify approved documents show the reviewer name and review date.
  • TEST 9 - Multi-Jurisdiction Compliance: Generate offer letters for employees in California, New York, Colorado, Montana, and a state with no special requirements (e.g., Texas). Verify: CA letter warns about non-compete unenforceability, NY/CO letters include pay ranges, Montana letter uses 'good cause' instead of 'at-will' language, and Texas letter uses standard at-will language.
  • TEST 10 - Volume and Performance Test: Generate 20 job descriptions in rapid succession (simulating a staffing agency's weekly batch). Verify all 20 complete without API errors, total generation time is under 10 minutes, OpenAI API costs are within expected range ($2-5 for the batch), and Zapier task consumption is as expected (60-100 tasks for 20 JDs with bias checks).
  • TEST 11 - Failure and Retry Test: Temporarily set an invalid OpenAI API key in Zapier and trigger a JD generation. Verify the Zap fails gracefully, an error notification is sent to the MSP admin, no blank/corrupt document is saved to SharePoint, and after restoring the correct API key the Zap processes successfully on retry.
  • TEST 12 - User Acceptance Testing (UAT): Schedule a 2-hour session with the HR Manager and lead Recruiter. Have them generate 3 JDs, 2 offer letters, and 1 onboarding packet using real (or realistic) data. Collect feedback on: output quality and accuracy, tone and brand voice match, time saved vs. manual process, ease of use, and any missing fields or sections. Document all feedback and adjust prompts before go-live.

Client Handoff

The client handoff should be a formal 90-minute session with all HR stakeholders (HR Manager, Recruiters, HR Generalists, Legal reviewer, and optionally the IT contact). Cover the following topics:

1
System Overview (15 min): Walk through the architecture diagram showing how ATS → AI → SharePoint → Approval → Publishing/DocuSign flows work. Explain what is automated vs. what requires human action. Reinforce that AI generates DRAFTS—humans approve and publish.
2
Live Demonstrations (20 min): Generate a real JD, offer letter, and onboarding packet live, showing each step. Demonstrate the approval workflow in Teams. Show the compliance log in SharePoint.
3
Hands-On Practice (20 min): Each user generates at least one document independently. MSP technician available for questions.
4
Compliance Review (15 min): Walk through the compliance log and explain its purpose. Review jurisdiction-specific requirements (NYC LL144, IL HB 3773, CO SB 24-205). Explain the bias detection scoring and what to do if a score is below 85. Review the human-in-the-loop requirement—NEVER publish AI content without human review.
5
Troubleshooting & Escalation (10 min): Common issues and self-service fixes (e.g., Copilot agent not responding → check license; Zapier not triggering → check ATS webhook). MSP support contact information and SLA terms. Escalation path: User → HR Manager → MSP Help Desk → MSP AI Specialist.
6
Documentation Handoff (10 min): Deliver the following documents: (a) Quick Reference Cards for each workflow (1-page PDFs), (b) System Architecture Diagram, (c) Prompt Library Documentation (all system prompts with version numbers), (d) Compliance Checklist by Jurisdiction, (e) Troubleshooting Guide, (f) MSP Support Contact Card with SLA terms. All documents are uploaded to the 'Brand Guidelines' SharePoint library for permanent access.

Maintenance

Ongoing MSP Responsibilities:

Weekly (15–30 min):

  • Review Zapier task usage dashboard—verify no failed Zaps, check task consumption against plan limits
  • Spot-check 2–3 entries in the AI Compliance Log to verify logging is working correctly
  • Monitor OpenAI API usage dashboard for unexpected cost spikes

Monthly (1–2 hours):

  • Review and optimize prompt performance: analyze user feedback on generated content quality, adjust system prompts if consistent issues are reported (e.g., JDs consistently too long, offer letters missing a field)
  • Review Copilot Studio agent analytics: usage frequency, average satisfaction scores, common user queries
  • Update software: check for Zapier Zap version updates, Copilot Studio agent improvements, new ATS/HRIS API versions
  • Verify license assignments: ensure new HR hires have Copilot licenses, remove licenses for departed staff
  • Send monthly usage report to client: documents generated by type, bias scores, approval rates, cost summary

Quarterly (2–4 hours):

  • Compliance review: check for new AI hiring regulations at federal, state, and local levels. Key dates to watch: NYC LL144 enforcement updates, Illinois HB 3773 (effective Jan 1, 2026), Colorado AI Act (effective June 30, 2026), EU AI Act milestones
  • Bias audit report: aggregate bias scores across all JDs generated in the quarter, identify trending issues, present findings to HR Manager and Legal
  • Prompt library version update: incorporate any new company policies, updated benefits, org chart changes, or new job families into the system prompts and training corpus
  • Template refresh: update offer letter and onboarding templates for any policy changes, new benefits plans (typically January), or legal requirement changes

Semi-Annually (4–6 hours):

  • Comprehensive system health check: test all Zaps end-to-end, verify all integrations are authenticated and functioning, test failover/retry mechanisms
  • OpenAI model evaluation: assess whether newer models (e.g., GPT-4.1 successor) offer better quality or lower cost; test and migrate if beneficial
  • ROI review with client stakeholders: compare time-to-fill, documents-per-week, and HR staff satisfaction metrics against pre-implementation baseline
  • Security review: rotate API keys, audit SharePoint permissions, review Zapier connected accounts

SLA Considerations:

  • Response time for system-down issues (Zaps failing, agents unresponsive): 2-hour response, 4-hour resolution during business hours
  • Response time for quality issues (bad output, bias detection false negatives): 1-business-day response, 3-business-day resolution
  • Prompt library updates after policy changes: 5-business-day turnaround
  • Emergency compliance updates (new regulation affecting client): 48-hour assessment, 10-business-day implementation

Escalation Path:

1
Client HR user self-service (quick reference cards, troubleshooting guide)
2
MSP Help Desk (Tier 1) — license issues, basic Zapier troubleshooting, password resets
3
MSP AI Specialist (Tier 2) — prompt engineering, integration debugging, compliance questions
4
MSP Solutions Architect (Tier 3) — system redesign, new integration requests, complex compliance scenarios
5
Vendor Support — Microsoft (Copilot/Studio issues), OpenAI (API issues), Zapier (platform issues)

Alternatives

BambooHR All-in-One Approach

Instead of the Microsoft Copilot + OpenAI API architecture, use BambooHR as the primary HRIS/ATS with its built-in AI Job Description Generator, native onboarding workflows, and e-signature capabilities. Supplement with a lightweight OpenAI API integration only for offer letter generation and advanced customization. This approach consolidates the HR tech stack into a single vendor.

Textio-Centric Approach for DEI-Focused Clients

Lead with Textio as the primary content generation and bias detection platform for job descriptions, supplemented by Microsoft Copilot for offer letters and onboarding documents. Textio provides real-time inclusive language scoring, predictive performance analytics, and A/B testing for job posting effectiveness. This approach prioritizes bias reduction and DEI compliance above all else.

Low-Cost Starter: Copilot-Only Approach

Use only Microsoft 365 Copilot (no Copilot Studio agents, no OpenAI API, no Zapier automation) for semi-automated HR content generation. HR staff use Copilot in Word to draft JDs and offer letters using natural language prompts, with manually uploaded templates as reference. No automated ATS/HRIS integration—staff manually copy content between systems.

Open-Source Self-Hosted LLM Approach

Deploy an open-source LLM (Llama 3 70B or Mistral Large) on-premises or in Azure VM with GPU, using a custom web interface for HR staff. All data stays on-premises/in client's cloud tenant—no third-party API calls. Template management via a custom document management system.

Note

Recommend when: Client has strict data sovereignty requirements (ITAR, classified environments), processes extremely high document volumes where API costs become prohibitive, or has regulatory requirements that prohibit sending employee data to third-party APIs even with Zero Data Retention enabled.

Want early access to the full toolkit?