KnowBe4 Phishing Simulation Management
Overview
KnowBe4 phishing simulations are the core mechanism for testing and improving an organization's resilience to social engineering attacks. Campaigns deliver simulated phishing emails to users and track their interactions -- whether they opened the email, clicked the link, submitted data on the landing page, reported it via the Phish Alert Button, or took no action. The phish-prone percentage is the key metric derived from these campaigns.
Anti-triggers
- A real phishing email that reached a user — every campaign,
click, and "failure" here is a simulation the MSP sent on purpose.
Genuine inbound phishing is detected by the mail-security vendor:
proofpoint-tap, avanan-threats, or
abnormal-security-threats.
- Finding, releasing, or pulling a message out of a mailbox —
KnowBe4 never touches production mail flow. Use
proofpoint-quarantine or avanan-quarantine to release,
and proofpoint-forensics to remove delivered mail.
- "Phish Alert Button" reports as a threat-intake queue — this
skill counts PAB reports as a pass/fail signal on a simulation; the
real user-reported phishing triage queue is
ironscales-incidents.
- Enrolling the users who failed into remedial training — the
enrollment side is
knowbe4-training.
- Organization-wide phish-prone percentage or department
breakdowns — per-campaign results are here; rolled-up metrics and
benchmarks are
knowbe4-reporting.
Key Concepts
Campaign Lifecycle
CREATED ──> SCHEDULED ──> IN_PROGRESS ──> COMPLETED
│ │
└──── CANCELLED └──> ARCHIVED
- Created: Campaign configured but not yet scheduled
- Scheduled: Campaign queued for delivery at a specific date/time
- In Progress: Emails are being sent and interactions tracked
- Completed: Campaign delivery finished, final results available
- Cancelled: Campaign aborted before completion
- Archived: Completed campaign moved to archive
Security Test Types
| Type |
Description |
Use Case |
| Phishing |
Standard email with link to landing page |
Most common, baseline testing |
| Vishing |
Voice-based social engineering simulation |
Phone-based attack awareness |
| Smishing |
SMS-based phishing simulation |
Mobile threat awareness |
| USB |
Physical USB drop test |
Physical security awareness |
| QR Code |
QR code-based phishing |
Emerging threat vector |
Recipient Interaction States
Each recipient in a campaign progresses through trackable states:
| State |
Description |
Indicates |
| Delivered |
Email successfully delivered |
Baseline count |
| Opened |
Recipient opened the email |
Curiosity/engagement |
| Clicked |
Recipient clicked the phishing link |
Failed the test |
| Replied |
Recipient replied to the email |
Failed the test (data leakage risk) |
| Attachment Opened |
Recipient opened an attachment |
Failed the test |
| Macro Enabled |
Recipient enabled macros in attachment |
Critical failure |
| Data Entered |
Recipient submitted data on landing page |
Critical failure |
| Reported |
Recipient reported via Phish Alert Button |
Passed the test |
| No Action |
No interaction recorded |
Neutral (may not have seen it) |
Phish-Prone Percentage Calculation
The phish-prone percentage (PPP) is the primary metric for organizational risk:
function calculatePhishPronePercentage(campaign) {
const totalDelivered = campaign.recipients.filter(r => r.delivered).length;
const totalFailed = campaign.recipients.filter(r =>
r.clicked || r.replied || r.attachmentOpened || r.macroEnabled || r.dataEntered
).length;
if (totalDelivered === 0) return 0;
return ((totalFailed / totalDelivered) * 100).toFixed(1);
}
Industry Benchmarks:
| PPP Range |
Rating |
Context |
| 0-5% |
Excellent |
Well-trained organization |
| 5-15% |
Good |
Regular training in place |
| 15-30% |
Average |
Industry baseline for new programs |
| 30-50% |
Poor |
Needs immediate attention |
| 50%+ |
Critical |
High-risk organization |
Field Reference
Campaign Fields
| Field |
Type |
Description |
campaign_id |
int |
Unique campaign identifier |
name |
string |
Campaign name |
status |
string |
Current status (created, scheduled, in_progress, completed) |
create_date |
datetime |
When campaign was created |
start_date |
datetime |
Scheduled start date |
end_date |
datetime |
Campaign end date |
duration_type |
string |
How long the campaign runs (e.g., one_week, two_weeks) |
send_duration |
string |
Email delivery spread period |
track_duration |
string |
How long to track interactions after delivery |
frequency_type |
string |
One-time, weekly, bi-weekly, monthly |
phishing_template_id |
int |
Template used for the phishing email |
landing_page_id |
int |
Landing page shown after click |
groups |
array |
Target groups for the campaign |
Phishing Security Test (PST) Fields
| Field |
Type |
Description |
pst_id |
int |
Unique security test identifier |
status |
string |
Test status |
started_at |
datetime |
When the test began |
category |
object |
Template category info |
template |
object |
Email template details |
landing_page |
object |
Landing page details |
scheduled_count |
int |
Recipients scheduled to receive |
delivered_count |
int |
Emails successfully delivered |
opened_count |
int |
Emails opened |
clicked_count |
int |
Links clicked |
replied_count |
int |
Replies sent |
attachment_open_count |
int |
Attachments opened |
macro_enabled_count |
int |
Macros enabled |
data_entered_count |
int |
Data entered on landing page |
reported_count |
int |
Reported via PAB |
bounced_count |
int |
Emails bounced |
Recipient Fields
| Field |
Type |
Description |
recipient_id |
int |
Unique recipient identifier |
pst_id |
int |
Parent security test |
user |
object |
User details (name, email, department) |
scheduled_at |
datetime |
When email is scheduled |
delivered_at |
datetime |
When email was delivered |
opened_at |
datetime |
When email was opened |
clicked_at |
datetime |
When link was clicked |
replied_at |
datetime |
When reply was sent |
attachment_opened_at |
datetime |
When attachment was opened |
macro_enabled_at |
datetime |
When macro was enabled |
data_entered_at |
datetime |
When data was entered |
reported_at |
datetime |
When it was reported |
bounced_at |
datetime |
When email bounced |
ip |
string |
IP address of interaction |
browser |
string |
Browser used for click |
MCP Tools
| Tool |
Description |
Parameters (required in bold) |
knowbe4_phishing_campaigns_list |
List all phishing campaigns |
page, per_page |
knowbe4_phishing_campaigns_get |
Get campaign details, including its associated security tests |
campaign_id |
knowbe4_phishing_campaign_tests |
List the Phishing Security Tests belonging to one campaign |
campaign_id, page, per_page |
knowbe4_phishing_security_tests_list |
List Phishing Security Tests across all campaigns |
page, per_page |
knowbe4_phishing_security_test_get |
Get detailed results for one PST — PPP, clicked/opened/reported counts |
pst_id |
knowbe4_phishing_security_test_recipients |
Recipient-level results for one PST: who clicked, opened, reported |
pst_id, page, per_page |
knowbe4_phishing_security_test_recipient |
One recipient's result within one PST |
pst_id, recipient_id |
There is no campaign-level recipient tool. Recipients hang off a Phishing
Security Test, never off a campaign, so "who clicked in this campaign"
is two steps: knowbe4_phishing_campaign_tests to get the campaign's
PSTs, then knowbe4_phishing_security_test_recipients per PST. A
recipient ID is only meaningful alongside the pst_id it came from —
knowbe4_phishing_security_test_recipient requires both.
There is no phishing-template tool. Nothing in this plugin lists the
template library or reads a single template's content, and no page/
per_page sweep will find one. Template selection is console work.
Campaign and PST records name the template that was used, which is enough
to compare how templates performed after the fact, but not to browse what
is available before a send.
None of the list tools filter by status or date. Narrowing to "completed
campaigns since March" means paginating and filtering client-side.
Common Workflows
Review Campaign Results
- List campaigns to find the target campaign
- Get campaign details for overview metrics
- List security tests within the campaign
- Get security test results for detailed interaction counts
- List recipients to identify who clicked/failed
- Calculate PPP from the results
Identify High-Risk Users
- List completed campaigns from a date range
- Get recipients who clicked or entered data across campaigns
- Cross-reference with user profiles for repeat offenders
- Generate report of users who failed multiple tests
Compare Campaign Performance Over Time
- List all campaigns sorted by date
- Get PPP for each campaign
- Track trend -- PPP should decrease over time with training
- Identify anomalies -- sudden PPP increase may indicate new attack vector or template difficulty
Post-Campaign Remediation
- Get failed recipients from completed campaign
- Enroll failed users in remedial training
- Schedule follow-up test targeting the same users
- Compare results to measure improvement
Error Handling
Common API Errors
| Code |
Message |
Resolution |
| 400 |
Invalid campaign parameters |
Check date formats and required fields |
| 401 |
Invalid API token |
Verify KNOWBE4_API_KEY |
| 403 |
Insufficient permissions |
API token needs Reporting permissions |
| 404 |
Campaign not found |
Verify campaign_id exists |
| 429 |
Rate limit exceeded |
Implement backoff (see api-patterns) |
Data Considerations
| Issue |
Cause |
Resolution |
| Zero delivered count |
Campaign just started |
Wait for delivery to complete |
| High bounce rate |
Invalid email addresses |
Clean user list before next campaign |
| No reported count |
PAB not deployed |
Install Phish Alert Button |
| Opened count higher than delivered |
Email previews/security scanners |
Filter by user agent if available |
Best Practices
- Vary templates -- Use different phishing scenarios to avoid pattern recognition
- Spread delivery -- Send over days/weeks, not all at once, to avoid "water cooler effect"
- Track trends, not individual tests -- Single campaigns can be noisy; look at 3-6 month trends
- Combine with training -- Auto-enroll failed users in relevant training modules
- Use realistic scenarios -- Match templates to actual threats your clients face
- Baseline first -- Run an initial campaign before training to establish baseline PPP
- Report to leadership -- Share PPP trends with management to justify security awareness investment
- Test all levels -- Include executives and IT staff, not just general users
- Respect local regulations -- Some regions have restrictions on simulated phishing
- Set proper tracking duration -- Allow 72 hours minimum for accurate click data
Related Skills
1---2name: knowbe4-phishing3description: KnowBe4 phishing simulations: campaign creation and lifecycle, security test management, recipient interaction tracking (sent, opened, clicked, reported), phish-prone percentage calculation, template selection, landing pages, and click tracking.4---56# KnowBe4 Phishing Simulation Management78## Overview910KnowBe4 phishing simulations are the core mechanism for testing and improving an organization's resilience to social engineering attacks. Campaigns deliver simulated phishing emails to users and track their interactions -- whether they opened the email, clicked the link, submitted data on the landing page, reported it via the Phish Alert Button, or took no action. The phish-prone percentage is the key metric derived from these campaigns.1112## Anti-triggers1314- **A real phishing email that reached a user** — every campaign,15 click, and "failure" here is a simulation the MSP sent on purpose.16 Genuine inbound phishing is detected by the mail-security vendor:17 `proofpoint-tap`, `avanan-threats`, or18 `abnormal-security-threats`.19- **Finding, releasing, or pulling a message out of a mailbox** —20 KnowBe4 never touches production mail flow. Use21 `proofpoint-quarantine` or `avanan-quarantine` to release,22 and `proofpoint-forensics` to remove delivered mail.23- **"Phish Alert Button" reports as a threat-intake queue** — this24 skill counts PAB reports as a pass/fail signal on a simulation; the25 real user-reported phishing triage queue is `ironscales-incidents`.26- **Enrolling the users who failed into remedial training** — the27 enrollment side is `knowbe4-training`.28- **Organization-wide phish-prone percentage or department29 breakdowns** — per-campaign results are here; rolled-up metrics and30 benchmarks are `knowbe4-reporting`.3132## Key Concepts3334### Campaign Lifecycle3536```37CREATED ──> SCHEDULED ──> IN_PROGRESS ──> COMPLETED38 │ │39 └──── CANCELLED └──> ARCHIVED40```4142- **Created**: Campaign configured but not yet scheduled43- **Scheduled**: Campaign queued for delivery at a specific date/time44- **In Progress**: Emails are being sent and interactions tracked45- **Completed**: Campaign delivery finished, final results available46- **Cancelled**: Campaign aborted before completion47- **Archived**: Completed campaign moved to archive4849### Security Test Types5051| Type | Description | Use Case |52|------|-------------|----------|53| **Phishing** | Standard email with link to landing page | Most common, baseline testing |54| **Vishing** | Voice-based social engineering simulation | Phone-based attack awareness |55| **Smishing** | SMS-based phishing simulation | Mobile threat awareness |56| **USB** | Physical USB drop test | Physical security awareness |57| **QR Code** | QR code-based phishing | Emerging threat vector |5859### Recipient Interaction States6061Each recipient in a campaign progresses through trackable states:6263| State | Description | Indicates |64|-------|-------------|-----------|65| **Delivered** | Email successfully delivered | Baseline count |66| **Opened** | Recipient opened the email | Curiosity/engagement |67| **Clicked** | Recipient clicked the phishing link | Failed the test |68| **Replied** | Recipient replied to the email | Failed the test (data leakage risk) |69| **Attachment Opened** | Recipient opened an attachment | Failed the test |70| **Macro Enabled** | Recipient enabled macros in attachment | Critical failure |71| **Data Entered** | Recipient submitted data on landing page | Critical failure |72| **Reported** | Recipient reported via Phish Alert Button | Passed the test |73| **No Action** | No interaction recorded | Neutral (may not have seen it) |7475### Phish-Prone Percentage Calculation7677The phish-prone percentage (PPP) is the primary metric for organizational risk:7879```javascript80function calculatePhishPronePercentage(campaign) {81 const totalDelivered = campaign.recipients.filter(r => r.delivered).length;82 const totalFailed = campaign.recipients.filter(r =>83 r.clicked || r.replied || r.attachmentOpened || r.macroEnabled || r.dataEntered84 ).length;8586 if (totalDelivered === 0) return 0;87 return ((totalFailed / totalDelivered) * 100).toFixed(1);88}89```9091**Industry Benchmarks:**92| PPP Range | Rating | Context |93|-----------|--------|---------|94| 0-5% | Excellent | Well-trained organization |95| 5-15% | Good | Regular training in place |96| 15-30% | Average | Industry baseline for new programs |97| 30-50% | Poor | Needs immediate attention |98| 50%+ | Critical | High-risk organization |99100## Field Reference101102### Campaign Fields103104| Field | Type | Description |105|-------|------|-------------|106| `campaign_id` | int | Unique campaign identifier |107| `name` | string | Campaign name |108| `status` | string | Current status (created, scheduled, in_progress, completed) |109| `create_date` | datetime | When campaign was created |110| `start_date` | datetime | Scheduled start date |111| `end_date` | datetime | Campaign end date |112| `duration_type` | string | How long the campaign runs (e.g., one_week, two_weeks) |113| `send_duration` | string | Email delivery spread period |114| `track_duration` | string | How long to track interactions after delivery |115| `frequency_type` | string | One-time, weekly, bi-weekly, monthly |116| `phishing_template_id` | int | Template used for the phishing email |117| `landing_page_id` | int | Landing page shown after click |118| `groups` | array | Target groups for the campaign |119120### Phishing Security Test (PST) Fields121122| Field | Type | Description |123|-------|------|-------------|124| `pst_id` | int | Unique security test identifier |125| `status` | string | Test status |126| `started_at` | datetime | When the test began |127| `category` | object | Template category info |128| `template` | object | Email template details |129| `landing_page` | object | Landing page details |130| `scheduled_count` | int | Recipients scheduled to receive |131| `delivered_count` | int | Emails successfully delivered |132| `opened_count` | int | Emails opened |133| `clicked_count` | int | Links clicked |134| `replied_count` | int | Replies sent |135| `attachment_open_count` | int | Attachments opened |136| `macro_enabled_count` | int | Macros enabled |137| `data_entered_count` | int | Data entered on landing page |138| `reported_count` | int | Reported via PAB |139| `bounced_count` | int | Emails bounced |140141### Recipient Fields142143| Field | Type | Description |144|-------|------|-------------|145| `recipient_id` | int | Unique recipient identifier |146| `pst_id` | int | Parent security test |147| `user` | object | User details (name, email, department) |148| `scheduled_at` | datetime | When email is scheduled |149| `delivered_at` | datetime | When email was delivered |150| `opened_at` | datetime | When email was opened |151| `clicked_at` | datetime | When link was clicked |152| `replied_at` | datetime | When reply was sent |153| `attachment_opened_at` | datetime | When attachment was opened |154| `macro_enabled_at` | datetime | When macro was enabled |155| `data_entered_at` | datetime | When data was entered |156| `reported_at` | datetime | When it was reported |157| `bounced_at` | datetime | When email bounced |158| `ip` | string | IP address of interaction |159| `browser` | string | Browser used for click |160161## MCP Tools162163| Tool | Description | Parameters (required in **bold**) |164|------|-------------|----------------|165| `knowbe4_phishing_campaigns_list` | List all phishing campaigns | `page`, `per_page` |166| `knowbe4_phishing_campaigns_get` | Get campaign details, including its associated security tests | **`campaign_id`** |167| `knowbe4_phishing_campaign_tests` | List the Phishing Security Tests belonging to **one** campaign | **`campaign_id`**, `page`, `per_page` |168| `knowbe4_phishing_security_tests_list` | List Phishing Security Tests across **all** campaigns | `page`, `per_page` |169| `knowbe4_phishing_security_test_get` | Get detailed results for one PST — PPP, clicked/opened/reported counts | **`pst_id`** |170| `knowbe4_phishing_security_test_recipients` | Recipient-level results for one PST: who clicked, opened, reported | **`pst_id`**, `page`, `per_page` |171| `knowbe4_phishing_security_test_recipient` | One recipient's result within one PST | **`pst_id`**, **`recipient_id`** |172173There is no campaign-level recipient tool. Recipients hang off a Phishing174Security Test, never off a campaign, so "who clicked in this campaign"175is two steps: `knowbe4_phishing_campaign_tests` to get the campaign's176PSTs, then `knowbe4_phishing_security_test_recipients` per PST. A177recipient ID is only meaningful alongside the `pst_id` it came from —178`knowbe4_phishing_security_test_recipient` requires both.179180**There is no phishing-template tool.** Nothing in this plugin lists the181template library or reads a single template's content, and no `page`/182`per_page` sweep will find one. Template selection is console work.183Campaign and PST records name the template that was used, which is enough184to compare how templates performed after the fact, but not to browse what185is available before a send.186187None of the list tools filter by status or date. Narrowing to "completed188campaigns since March" means paginating and filtering client-side.189190## Common Workflows191192### Review Campaign Results1931941. **List campaigns** to find the target campaign1952. **Get campaign details** for overview metrics1963. **List security tests** within the campaign1974. **Get security test results** for detailed interaction counts1985. **List recipients** to identify who clicked/failed1996. **Calculate PPP** from the results200201### Identify High-Risk Users2022031. **List completed campaigns** from a date range2042. **Get recipients** who clicked or entered data across campaigns2053. **Cross-reference** with user profiles for repeat offenders2064. **Generate report** of users who failed multiple tests207208### Compare Campaign Performance Over Time2092101. **List all campaigns** sorted by date2112. **Get PPP** for each campaign2123. **Track trend** -- PPP should decrease over time with training2134. **Identify anomalies** -- sudden PPP increase may indicate new attack vector or template difficulty214215### Post-Campaign Remediation2162171. **Get failed recipients** from completed campaign2182. **Enroll failed users** in remedial training2193. **Schedule follow-up test** targeting the same users2204. **Compare results** to measure improvement221222## Error Handling223224### Common API Errors225226| Code | Message | Resolution |227|------|---------|------------|228| 400 | Invalid campaign parameters | Check date formats and required fields |229| 401 | Invalid API token | Verify KNOWBE4_API_KEY |230| 403 | Insufficient permissions | API token needs Reporting permissions |231| 404 | Campaign not found | Verify campaign_id exists |232| 429 | Rate limit exceeded | Implement backoff (see api-patterns) |233234### Data Considerations235236| Issue | Cause | Resolution |237|-------|-------|------------|238| Zero delivered count | Campaign just started | Wait for delivery to complete |239| High bounce rate | Invalid email addresses | Clean user list before next campaign |240| No reported count | PAB not deployed | Install Phish Alert Button |241| Opened count higher than delivered | Email previews/security scanners | Filter by user agent if available |242243## Best Practices2442451. **Vary templates** -- Use different phishing scenarios to avoid pattern recognition2462. **Spread delivery** -- Send over days/weeks, not all at once, to avoid "water cooler effect"2473. **Track trends, not individual tests** -- Single campaigns can be noisy; look at 3-6 month trends2484. **Combine with training** -- Auto-enroll failed users in relevant training modules2495. **Use realistic scenarios** -- Match templates to actual threats your clients face2506. **Baseline first** -- Run an initial campaign before training to establish baseline PPP2517. **Report to leadership** -- Share PPP trends with management to justify security awareness investment2528. **Test all levels** -- Include executives and IT staff, not just general users2539. **Respect local regulations** -- Some regions have restrictions on simulated phishing25410. **Set proper tracking duration** -- Allow 72 hours minimum for accurate click data255256## Related Skills257258- [KnowBe4 Training](../training/SKILL.md) - Training campaign management and enrollment259- [KnowBe4 Users](../users/SKILL.md) - User management and risk scores260- [KnowBe4 Reporting](../reporting/SKILL.md) - Security awareness metrics and dashboards261- [KnowBe4 API Patterns](../api-patterns/SKILL.md) - Authentication, pagination, and rate limits