Standard Operating Procedure

ESG Compliance Checker.
How it works.

Maintained by Sally Reg database owned by Emma March 2026
Overview

What this tool is

The ESG Compliance Checker does two things simultaneously. For the prospect, it produces a personalised report mapping which UK ESG regulations apply to their business, with AI-generated strategic advice. For Perigon, it generates a qualified lead with a scored profile and internal notification.

Lead generation
Branded intake form
Hosted on Netlify. Fires a webhook on submit.
Lead qualification
ICP scoring
Scores 0–10 based on company type, size, sector, flags.
Report generation
AI + HTML assembly
Claude evaluates regs, writes prose. Code step builds the HTML.
Delivery
Email + Netlify URL
Client gets their report link. Emma gets an internal notification.
Key people

Emma Walford — owns the regulation database. When regulations change, she updates perigon-reg-reference.md in Google Drive. No code changes needed.

Sally — built and maintains the tool. Point of contact for technical issues.

Overview

System architecture

The form fires two webhooks simultaneously when a prospect submits. One triggers the report Zap, one triggers the lead scoring Zap. They run independently from the same payload.

End-to-end flow
Prospect
Form
HTML intake form
Netlify · perigon-compliance-form-v2.html
↓ Two webhooks fire simultaneously ↓
Report Zap (7 steps)
Step 1
Webhook trigger
Catches form payload
Step 2
Google Drive
Fetches reg reference doc
Step 3
Claude AI
Evaluates regs + writes narrative
Step 4
HTML assembly
Builds branded report
Step 5
Netlify deploy
Creates live report URL
Steps 6–7
Emails
Client report link + Emma notification
Lead Zap (4 steps)
Step 1
Webhook trigger
Same payload, separate Zap
Step 2
Generate Lead ID
Unique ID per submission
Step 3
ICP scoring
0–10 score + tier + next step
Step 4
Google Sheets
Row added to lead database
Why the AI doesn't read the form answers directly

The form sends raw answers only. Claude reads perigon-reg-reference.md from Google Drive and evaluates which regulations apply on every submission. This is the key architectural decision: Emma can update the regulation database by editing one file, with no code changes anywhere.

Operations

Updating regulations

This is Emma's responsibility. No developer involvement is needed. When a regulation changes — a threshold shifts, a deadline moves, a new obligation comes into force — edit the file and save it back to the same Google Drive location.

1
Open the regulation reference document
File: perigon-reg-reference.md in the Perigon Partners Google Drive. This is the single source of truth for all 14 regulations.
2
Find the regulation to update
Each regulation has its own numbered section. The key fields to edit are: Priority label (Required / On the Horizon / Monitor), Specific thresholds, What is required, and Effective dates.
3
Make the change and save
Edit the relevant field. Update the version date at the top of the document. Save back to the same Google Drive location — do not rename the file or move it to a different folder.
4
The change takes effect immediately
The next form submission will use the updated version. No Zap edits, no code deployments needed. Claude reads the file fresh on every submission.
Adding a new regulation

Adding a new regulation requires a developer to also update the tooltip text in the HTML assembly code (zapier-html-assembly.js). The tooltip provides the hover-over detail in the client report. Contact Sally for this change.

Priority label definitions

LabelMeaningWhen to use
Required Applies now based on current profile Regulation is in force and threshold is met
On the Horizon Does not apply yet but is anticipated Expected to apply soon or company is near the threshold
Monitor May apply — company should verify Depends on factors the form can't determine
Operations

Testing the tool

Test with at least these four profiles before going live or after any change to the regulation document.

Test profileExpected RequiredExpected Horizon
Listed, 500+ staff, FCA-auth (not asset manager) GPG, Modern Slavery, SECR, CFD, FCA TCFD UK SRS, CA UK SRS, ESOS
PE-backed, 200 staff, £40m revenue, £20m assets Modern Slavery, SECR UK SRS, ESOS
Private, under 100 staff, under £25m revenue None UK SRS
FCA-auth asset manager, £5bn+ AUM FCA TCFD, SDR Entity, SDR Product UK SRS, CA UK SRS
Testing in Zapier draft mode

Zapier runs more slowly in the editor than in live Zaps. The AI step is more likely to hit the 30-second timeout in draft mode. If it times out in testing but the output looks otherwise correct, test with a live Zap run before concluding there is a problem.

Operations

Lead flow

Every form submission fires both Zaps. The lead scoring Zap runs independently and adds a row to the lead database in Google Sheets.

ICP scoring (0–10)

FactorMaxWhat scores highest
Company type3 ptsPE-backed or Listed
Employee count2 pts100+ employees
Revenue2 pts£36m–£499m
Sector flags2 ptsFCA-authorised or IPO flag
ESG maturity1 pt1–5 items explored (sweet spot)
Job title2 ptsCEO / MD (2pts), senior/ExCo (1pt)
🔥 Hot (7–10)
Priority outreach
Direct CEO contact within 48 hours.
🌤 Warm (4–6)
Nurture sequence
Newsletter + follow-up in 2–4 weeks.

Emma's internal notification email includes a suggested next step tailored to the lead's profile — FCA-authorised, PE-backed, IPO flag, or ESG maturity level.

Reference

All project files

FileWhat it doesWhere it lives
perigon-compliance-form-v2.htmlThe intake form. Fires both webhooks on submit.Netlify (deployed)
perigon-reg-reference.mdSingle source of truth for all regulations. Emma edits this.Google Drive
perigon-claude-prompts.mdSystem + User prompts for the Claude AI step in Zapier.Paste into Zapier Step 3
zapier-html-assembly.jsBuilds the full HTML report from Claude's output.Code by Zapier (Step 4)
zapier-emma-formatter.jsFormats data for Emma's internal notification email.Code by Zapier (before Step 7)
perigon-email-template.htmlClient-facing email with report link.Zapier Step 6 email body
perigon-emma-email.htmlInternal notification email to Emma.Zapier Step 7 email body
Reference

Zapier step-by-step

Report Zap — field mapping

1
Webhooks — Catch Hook
Trigger. No configuration needed beyond setting the webhook URL in the form. All form fields arrive named and ready to use.
2
Google Drive — Get File Contents
Search for perigon-reg-reference.md. Important: use "Get File Contents" not "Get File" — the latter returns only metadata. The output content field maps to {{gdrive_file_content}} in Step 3.
3
Anthropic — Claude AI
Model: claude-sonnet-4-6. Max tokens: 1500 (critical — higher values cause 30-second timeout). Paste system prompt and user prompt from perigon-claude-prompts.md. Map all fields as listed in the prompts file.
4
Code by Zapier — HTML Assembly
Paste zapier-html-assembly.js. Map: ai_output from Step 3, name, company_name, report_date from Step 1. Outputs: html_content, filename.
5
Netlify — Deploy
Map html_content from Step 4 as file content. Map filename from Step 4 as the filename. The deploy URL output maps to {{report_url}} in Steps 6 and 7.
6
Email — Client report
From: emma@perigonpartners.co.uk. To: {{email}} from Step 1. Subject: Your ESG compliance briefing — {{company_name}}. Body: paste perigon-email-template.html, map {{first_name}}, {{company_name}}, {{report_date}}, {{report_url}}.
7
Code by Zapier — Emma Formatter
Paste zapier-emma-formatter.js. Map flags, esgExplored, companyType, employees_label, revenue_label, assets_label, sector, job_title from Step 1. Map ai_output from Step 3.
8
Email — Emma notification
To: emma@perigonpartners.co.uk. Subject: New ESG assessment — {{company_name}}. Body: paste perigon-emma-email.html, map all fields from formatter output + Step 1 + Netlify deploy URL.
Reference

Regulation database

14 UK ESG regulations are currently covered. Two (Anti-Greenwashing and PRA SS5/25) appear in the narrative prose only — not in the compliance table.

Regulation Trigger Status
Gender Pay Gap ReportingStaff ≥ 250Required
Modern Slavery ActRevenue ≥ £36mRequired
SECR2 of 3: revenue >£36m, staff ≥250, assets >£18mRequired
Carbon Reduction PlanGovernment supplier flagRequired
Companies Act CFDListed, or bank/insurer, or staff ≥500 + revenue/assets ≥£500mRequired
FCA TCFDListed, or asset manager with AUM ≥ £5bnRequired
FCA SDR — Entity ReportingAsset manager with AUM ≥ £5bn onlyRequired
FCA SDR — Product LabellingAsset manager with AUM ≥ £5bn + labelled productsRequired
UK SRSAll profilesOn the Horizon
CA UK SRSListed companies onlyOn the Horizon
ESOS Phase 42 of 3: revenue >£44m, staff ≥250, assets >£38mOn the Horizon
FCA Public Offers RegsIPO flag tickedOn the Horizon
FCA Anti-GreenwashingFCA-authorised — prose onlyProse only
PRA SS5/25Banks/insurers — prose onlyProse only
Reference

Troubleshooting

AI step times out

Symptom: Claude output is cut off mid-section, usually during [HORIZON_START].
Fix: Set max tokens to 1500 in the Anthropic Zapier action. This is the most common issue. Also more likely in Zapier draft/test mode than in live runs.

Compliance table not parsing in HTML report

Symptom: The compliance map in the report is empty or shows only one row.
Cause: Newlines between rows may be collapsing to spaces in Zapier. The assembly code splits on \n.
Fix: Check the raw Claude output in Zapier to confirm whether newlines are preserved in the [TABLE_START] block.

FCA SDR showing for non-asset-manager firms

Symptom: SDR Entity Reporting or Product Labelling appearing in the compliance table for firms that selected "all other FCA-authorised firms."
Fix: Check the Claude system prompt contains the rule: "FCA SDR entity-level reporting and product labelling apply ONLY to asset managers with £5bn+ AUM." If the prompt has drifted, re-paste from perigon-claude-prompts.md.

Em dashes appearing in report prose

Symptom: The character "—" appears in any of the three narrative sections.
Fix: The system prompt bans them explicitly. If they reappear, add a reminder line at the very end of the system prompt: "Final check: the em dash character must not appear anywhere in your output."

Google Drive step returning metadata only

Symptom: Claude output contains no regulation information — it cannot evaluate the company profile.
Fix: The Google Drive Zapier action must be "Get File Contents" not "Get File". The content field must be mapped to {{gdrive_file_content}} in the user prompt.

AI & Content

AI prompt rules

These rules are embedded in the Claude system prompt. If output quality degrades, check the prompt against these.

Regulations
Reference doc only
No inventing, inferring, or adding regs not in the document.
Language
British English
Organisation, realise, licence, behaviour — throughout.
Em dashes
Never — absolute ban
Rewrite with full stop, comma, or two sentences.
Peer comparison
Never
No "ahead of peers" or "most companies haven't." No benchmarking data exists.
Terminology
"Products" not "investments"
Tool serves all regulated sectors, not just asset managers.
Section headers
Never in output
Headers are hardcoded in the HTML. Claude must not repeat them.

ESG maturity posture

Claude adjusts its entire tone and depth based on how many ESG activities the prospect has already started.

Items startedPosture
0–1 itemsWrite for a company just beginning. Frame obligations as the starting point.
2–3 itemsBuilding foundations. Acknowledge what exists and show how it connects to what comes next.
4+ itemsShift entirely to "compliance to differentiation." Don't explain what regulations require — explain how to use them commercially.
AI & Content

Costs

Claude Sonnet 4.6 API
~£0.02 per lead
~4,800 input tokens + ~700 output. $3/$15 per million.
Netlify deploy
~£0.08 per lead
One HTML file per submission.
Google Drive + Zapier
Included
Covered within existing Zapier plan.
Total per lead
~£0.10–0.12
Down from ~£0.25 in the previous JotForm version.