Interpreting AML Screening Results

A detailed guide to understanding the results of an AML check, from the high-level summary down to the details of each watchlist match.

How to Read an AML Result

When you execute a workflow containing an AML step, the API response provides a rich set of data to help you understand the outcome. This guide provides a structured, “top-down” walkthrough of how to parse the workflowResult object, using a real-world example to illustrate each part.

The examples in this guide refer to a workflow execution response. Click to expand and see the full structure.

1{
2 "requestId": "01HN9XHZN6MGXM9JXG50K59Q85",
3 "workflowResult": {
4 "workflowExecutionId": "string",
5 "workflowExecutionState": "COMPLETED",
6 "status": "REVIEW",
7 "result": "REVIEW",
8 "riskAssessment": {
9 "riskLevel": "HIGH",
10 "riskScore": 100,
11 "riskFactors": []
12 },
13 "issues": [
14 {
15 "category": "AML",
16 "issue": "PEP",
17 "severity": "WARNING"
18 }
19 ],
20 "workflowStepResults": [
21 {
22 "stepName": "AML",
23 "result": "HIT",
24 "summary": {
25 "totalHits": 1,
26 "totalUnresolved": 1,
27 "numUnresolvedPEP": 1,
28 "numUnresolvedSanction": 0,
29 "numUnresolvedWatchlist": 0,
30 "numUnresolvedAdverseMedia": 0,
31 "providerSummaries": []
32 },
33 "processResults": [
34 {
35 "processResultId": "string",
36 "result": "HIT",
37 "class": "AML",
38 "providerResult": {
39 "name": "complyadvantage",
40 "confidence": { "normalized": 100 }
41 },
42 "supplementaryData": {
43 "type": "AML",
44 "matchData": {
45 "name": "John Doe",
46 "strength": 100
47 },
48 "pepData": [
49 {
50 "level": "2",
51 "position": "Former Member of Parliament",
52 "countryCode": "AUS",
53 "listingStart": "2010-01-01"
54 }
55 ],
56 "referenceDocs": [
57 {
58 "url": "https://source.example.com/john-doe-profile",
59 "description": "Official Parliamentary Record"
60 }
61 ]
62 },
63 "manualStatus": "UNRESOLVED"
64 }
65 ]
66 }
67 ]
68 },
69 "individual": {}
70}

1. The Overall Outcome (Final Verdict)

Always start by checking the top-level fields of the workflowResult object. These give you the final, authoritative outcome.

FieldImportanceDescription
status‼️The conclusive recommendation (e.g., PASS, FAIL, REVIEW). Base your business logic on this value.
workflowExecutionState‼️Confirms the workflow’s technical status. Must be COMPLETED.
result⚠️The original, automated outcome before any manual changes. Useful for auditing.
issues⚠️Array of problems that may require manual review. If status is REVIEW, this array contains the reasons.

2. Step-by-Step Breakdown (workflowStepResults)

The workflowStepResults array shows the outcome of each individual check and explains why the overall status was reached. For AML screening, look for the object where stepName is AML.

Key FieldDescription
resultMost important for the step. HIT means at least one potential match was found and requires review. CLEAR means no matches.
summaryAggregated statistics about the screening results.
processResultsArray containing detailed evidence for each individual watchlist match.

AML Summary Object Example

1"summary": {
2 "stepName": "AML",
3 "totalHits": 12,
4 "totalFalsePositives": 0,
5 "totalTruePositives": 0,
6 "totalUnresolved": 12,
7 "numUnresolvedPEP": 1,
8 "numUnresolvedSanction": 1,
9 "numUnresolvedWatchlist": 10,
10 "numUnresolvedAdverseMedia": 0,
11 "providerSummaries": [...]
12}

This summary immediately tells you the scale of the results. For example, numUnresolvedSanction highlights if a high-risk sanctions match is present.


3. The Process Results (Raw Evidence)

When an AML step returns a HIT, the processResults array will contain one or more Process Result Objects (PROs), each with class: "AML". Each PRO represents a single potential match and contains all the data you need for your investigation.

Anatomy of an AML Process Result

The most critical part of an AML PRO is the supplementaryData object. This is where you will find the details of the matched entity.

supplementaryData FieldDescription
matchDataCore information about the matched profile (name, date of birth, countries of association).
pepDataIf the match is a Politically Exposed Person, details about their position, level, and country.
sanctionDataIf the match is on a Sanctions list, details about the sanction, source, and reason.
watchlistDataDetails for matches on other regulatory or law enforcement watchlists.
mediaDataIf the match is from Adverse Media, snippets and links to relevant news articles.
referenceDocsURLs to source documents for further evidence.

This example shows a processResult for a HIT where the individual was matched against a PEP list. The pepData array is populated with the specific details of the political exposure.

1{
2 "processResultId": "01J285FC7DH5G113KF109RJHSD",
3 "result": "HIT",
4 "class": "AML",
5 "providerResult": { "name": "complyadvantage" },
6 "supplementaryData": {
7 "type": "AML",
8 "matchData": { "name": "John Citizen" },
9 "pepData": [
10 {
11 "level": "2",
12 "position": "Former Member of Parliament",
13 "countryCode": "AUS",
14 "listingStart": "2010-01-01"
15 }
16 ],
17 "referenceDocs": [
18 {
19 "url": "https://source.example.com/john-citizen-profile",
20 "description": "Official Parliamentary Record"
21 }
22 ]
23 },
24 "manualStatus": "UNRESOLVED"
25}

This example shows a processResult for a HIT on a sanctions list. The sanctionData array contains the critical details, including the sourceName and sourceReason.

1{
2 "processResultId": "01K396GD8EF6H224LG210SIJTE",
3 "result": "HIT",
4 "class": "AML",
5 "providerResult": { "name": "complyadvantage" },
6 "supplementaryData": {
7 "type": "AML",
8 "matchData": { "name": "Global Trading Corp" },
9 "sanctionData": [
10 {
11 "sourceName": "OFAC - Specially Designated Nationals (SDN) List",
12 "sourceReason": "Activities contrary to the foreign policy and national security interests of the United States.",
13 "countryCode": "USA",
14 "listingStart": "2021-05-10"
15 }
16 ]
17 },
18 "manualStatus": "UNRESOLVED"
19}

This example shows a processResult for a HIT from a negative news source. The mediaData array provides a snippet from the article and a url for a compliance officer to review.

1{
2 "processResultId": "01M4A7HE9FG7J335MH321TKKLF",
3 "result": "HIT",
4 "class": "AML",
5 "providerResult": { "name": "complyadvantage" },
6 "supplementaryData": {
7 "type": "AML",
8 "matchData": { "name": "Jane Smith" },
9 "mediaData": [
10 {
11 "title": "Local Businesswoman Charged in Embezzlement Scheme",
12 "snippet": "...Jane Smith, CEO of Smith Enterprises, was formally charged today in a multi-million dollar embezzlement case...",
13 "source": "Global Financial Times",
14 "sourceDate": "2024-11-01",
15 "url": "https://mediasource.example.com/article/12345"
16 }
17 ]
18 },
19 "manualStatus": "UNRESOLVED"
20}

4. Re-running the Workflow After Manual Clearance

If your compliance team manually reviews and clears all unresolved matches (for example, by marking them as false positives or not relevant), you must re-run the AML workflow for the entity to confirm their updated status.

  • Why re-run?
    The workflowResult status will only update to PASS or CLEAR after all issues have been resolved and the workflow is executed again.
  • How to re-run:
    Execute the same workflow for the entity via the API. The new result will reflect the manual resolutions and provide a final recommendation.

Tip: This step is essential for updating the entity’s compliance status and ensuring your records reflect the latest review outcome.


Appendix: Complete Reference Tables

Field nameImportanceDescription
status‼️The final, conclusive recommendation, including any manual overrides.
workflowExecutionState‼️The technical status of the execution. Must be COMPLETED for the result to be final.
result⚠️The original, automated outcome of the workflow before any manual overrides.
workflowStepResults⚠️An array containing the detailed outcomes of all steps executed in the workflow.
riskAssessment⚠️An object summarizing all risk factors and the overall risk level of the entity.
issues⚠️An array summarizing issues encountered that may require manual review.
errors⚠️An array listing any system-level errors encountered during execution.
statusOverrideAtℹ️The UTC timestamp indicating when the status was manually overridden.
statusOverrideByℹ️The user who manually overrode the status.
workflowExecutionIdℹ️A unique identifier for this specific workflow execution.
ValueDescription
UNCHECKEDThe workflow has not yet been run.
IN_PROGRESSThe workflow is currently running.
REVIEWThe workflow produced results that require manual review.
PASSThe workflow successfully completed with a PASS recommendation.
FAILThe workflow finished with a FAIL recommendation.
COMPLETEThe workflow finished. A PASS/FAIL is not required in this context.
INCOMPLETEThe workflow finished, but the results are considered incomplete.
NEEDS_APPROVALThe workflow requires an external approval before proceeding.
APPROVEDThe workflow’s final outcome has been manually approved.
REJECTEDThe workflow’s final outcome has been manually rejected.
BLOCKEDThe workflow was blocked from completing.
CLEARAn ongoing monitoring workflow completed with no issues raised.
URGENTAn ongoing monitoring workflow completed with matters requiring urgent review.
MONITORThe workflow completed and determined that further monitoring is required.
Field NameImportanceDescription
processResultIdℹ️The unique identifier of the process result.
result⚠️The actual pass/fail/match result from the provider (e.g., MATCH, NO_MATCH, HIT, CLEAR).
providerResult⚠️Details about the provider’s result, including name, source, and confidence.
systemStatus⚠️The FrankieOne status of the result. Must be VALID to be used in a workflow.
manualStatus⚠️Any manual status set after review (e.g., TRUE_POSITIVE).
state⚠️Denotes the final disposition of the check (e.g., COMPLETED, ERROR).
classℹ️The category of the process (e.g., KYC, AML, IDV).
supplementaryDataℹ️Additional rich data related to the process result, like pepData.
errors⚠️Any errors encountered as part of the process.