*** September 2026 Major Release ***Read and watch
Document type

Extracting data from sanctions screening reports

A screening vendor checks a name against the OFAC, EU and UN lists and prints what it found, each vendor in its own layout. A bank screens every customer at onboarding and rescreens its book as the lists change. Compliance teams read thousands a month, arriving as portal exports and PDF attachments.

An analyst needs the listed subject, every alias, the list and program, and the date of publication. A case management system matches those against the customer record and an analyst clears the alert or escalates it for filing.

Page 1 of a sample Sanctions Screening, with extracted values outlined
3,002Markdown characters
82parse blocks
45fields extracted
The problem

What makes sanctions screening reports hard

Every alias, a different shape

One record carries the primary name and its aliases, and each block prints a different set of rows from the one above it.

One record, two pages

The last alias can have its rows on one page and its quality alone at the top of the next.

Status arrives as prose

Which lists were checked, and when each last changed, run together in a single paragraph at the foot of the report.

How it works

Parse, extract, verify

1

Parse

Parse turns the document into reading-order Markdown and a hierarchy of blocks (text, tables, figures), and grounds each block to its exact location on the page.

2

Extract

You define the fields in a JSON schema, and Extract returns their values in a consistent, structured format, each linked back to where it appears in the Markdown.

3

Verify

Each value links back to where it appears, down to the character range in the Markdown, and the page and bounding box in the source document, so every result can be verified.

Worked example

One sanctions screening, end to end

About this document: A sanctions record report from Lursoft's public search, for OFAC SDN entry 8279. Two portrait pages: the listing with its list, program, publication date and remark, then six name blocks with their qualities and birth data, and the lists the service checks with the date each was last updated. Page 1 is featured. Every listed value is public US Treasury data.

Processing objective: The objective is to read the listing an analyst adjudicates: who is listed, under which list and program, when it was published and why. The publication date is returned as an ISO date, normalized from the day-first form the report prints.

Demonstration fields: Sanctioned subject, Sanctions list, Sanctions program, Date of publication, Listing remark

The document

2 of 2 pages
  • Page 1 of the sample Sanctions ScreeningPage 1shown below
  • Page 2 of the sample Sanctions ScreeningPage 2

Where each value came from

Page 1 of the sample Sanctions Screening, with every featured field outlined
Sanctioned subjectsubject_name
Viktor Anatolijevitch BOUT
The region of the sample Sanctions Screening containing Sanctioned subject, with the extracted value outlined
extraction_metadata["subject_name"]
{
  "value": "Viktor Anatolijevitch BOUT",
  "page": 1,
  "range": {
    "end": 102,
    "start": 76
  },
  "box": {
    "xmin": 0.08545,
    "ymin": 0.18321,
    "xmax": 0.63633,
    "ymax": 0.21999
  }
}
Sanctions listlisting.list_name
SDN (OFAC)
The region of the sample Sanctions Screening containing Sanctions list, with the extracted value outlined
extraction_metadata["listing.list_name"]
{
  "value": "SDN (OFAC)",
  "page": 1,
  "range": {
    "end": 203,
    "start": 193
  },
  "box": {
    "xmin": 0.37708,
    "ymin": 0.34041,
    "xmax": 0.90869,
    "ymax": 0.35909
  }
}
Sanctions programlisting.programs[0]
DRCONGO
The region of the sample Sanctions Screening containing Sanctions program, with the extracted value outlined
extraction_metadata["listing.programs[0]"]
{
  "value": "DRCONGO",
  "page": 1,
  "range": {
    "end": 250,
    "start": 243
  },
  "box": {
    "xmin": 0.37707,
    "ymin": 0.35908,
    "xmax": 0.90871,
    "ymax": 0.37787
  }
}
Date of publicationlisting.date_of_publication
2019-12-31
The region of the sample Sanctions Screening containing Date of publication, with the extracted value outlined

Printed on the page as 31.12.2019, normalized on extraction.

extraction_metadata["listing.date_of_publication"]
{
  "value": "2019-12-31",
  "page": 1,
  "range": {
    "end": 307,
    "start": 297
  },
  "box": {
    "xmin": 0.37705,
    "ymin": 0.37786,
    "xmax": 0.90872,
    "ymax": 0.39648
  }
}
Listing remarklisting.remark
Dealer and transporter of weapons and minerals; Owner, Great Lakes Business Company and Compagnie Aerienne des Grands
The region of the sample Sanctions Screening containing Listing remark, with the extracted value outlined
extraction_metadata["listing.remark"]
{
  "value": "Dealer and transporter of weapons and minerals; Owner, Great Lakes Business Company and Compagnie Aerienne des Grands",
  "page": 1,
  "range": {
    "end": 458,
    "start": 341
  },
  "box": {
    "xmin": 0.37703,
    "ymin": 0.39645,
    "xmax": 0.90876,
    "ymax": 0.43341
  }
}

How to try it yourself

Everything on this page is reproducible. The sample, its schema, and the Parse and Extract API outputs are published. You can repeat the same two calls from whichever surface you already build on.

  • Claude Skilldescribe the job; the agent writes it
  • CLIno code at all
  • MCPexpose ADE docs as an agent tool
  • REST APIany language
  • Pythonlandingai-ade
  • TypeScriptlandingai-ade
Why LandingAI?

Documents into data

Accurate

The best accuracy on the difficult documents other tools get wrong, such as messy scans, complicated tables, checkboxes and handwriting.

Auditable

Every answer cites its sources. Values come back with an audit trail (page, bounding box, character range) so a human can review them.

Agentic

Applies multi-step reasoning, and plans before it acts. Handles documents it has never seen before and adapts to variations.

API-first

Composable APIs that drop into any tech stack and can be called from anywhere. Easy to build on and embed in your pipelines and products.

Affordable

Cost-competitive rates with complete price transparency. Spend controls before you run, and every job reports its exact cost.

Enterprise-grade

Built for production and scale from day one. Fully observable and monitored, running securely in our cloud or yours.

Built for high-volume, high-throughput production

  • Zero data retention
  • Priority rate limits
  • Enhanced support
  • VPC and on-prem deployment

Available on Team and Enterprise plans.

Compare plans
Capabilities

Sanctions Screening processing highlights

Every vendor's report layout
OFAC, EU and UN lists
Primary names and aliases
Alias quality ratings
Sanctions programs
Listing and publication dates
Listing remarks
Records split across pages
Non-Latin and transliterated names
Dates normalized to ISO
Bounding box for every value
Zero data retention available
FAQs

Questions, answered

Every alias. Define the names as an array and each comes back with the fields its own block prints, so an alias carrying a quality rating keeps it and one without comes back null.

Yes. The parse runs in reading order across the page break, so rows printed at the top of the next page stay attached to the record they belong to.

No. One schema covers every screening vendor. The listings are the same public data underneath, so the fields you name come back whichever report they are printed in.

Every value comes back with its page, a bounding box and the character range in the parsed Markdown. An auditor asking why an alert was cleared can be shown the row the decision was read from.

A screening report carries names, birth data and the reason a person is listed, all of it published by the sanctioning authority. A schema can ask for the listing fields alone. Accounts are available with zero data retention, alongside SOC 2 Type II, GDPR and HIPAA compliance.

Start extracting sanctions screening data

Reliable, structured outputs with full traceability in minutes