Skip to main content

warninglists

Warning lists published by financial regulators, in one schema, with domain and name matching. A Python library, a command line tool and an MCP server.

Source What it is How it is read
iosco IOSCO I-SCAN: alerts submitted by IOSCO members (FCA, CNMV, AMF, FINMA, SEC, CONSOB, …) public CSV export
consob CONSOB website blocking orders (Italy, since July 2019) full text of the press releases
fca FCA Warning List, latest items official warnings RSS feed

Why three sources when I-SCAN already aggregates regulators: I-SCAN is voluntary and lags. On 14 October 2026, of the 1,944 registrable domains named in CONSOB blocking orders, 598 were also in I-SCAN; of the 20 domains in that week's FCA feed, 1 was. warninglists stats recomputes both figures on your own cache.

Install

pip install warninglists            # library and CLI
pip install "warninglists[mcp]"     # plus the MCP server

Python 3.10+. Two dependencies: publicsuffixlist and idna.

Command line

warninglists fetch                          # download all three lists into ~/.cache/warninglists
warninglists check https://clientzone.dmaeu.com/login
warninglists check etoro.com --json
warninglists search "Goldgcapital"
warninglists stats                          # freshness and completeness of each source
warninglists export --format csv -o alerts.csv
$ warninglists check https://clientzone.dmaeu.com/login
https://clientzone.dmaeu.com/login: 1 listed, 0 similar

LISTED
  [consob] CONSOB (Italy) · blocked · 2026-09-24
    host: clientzone.dmaeu.com · DMAsseteuBV
    https://www.consob.it/documents/d/area-pubblica/comunicato-stampa-del-24-settembre-2026

check --exit-code exits with 1 when anything is listed, for use in scripts.

Python

from warninglists import store
from warninglists.sources import consob, fca, iosco

for source in (iosco, consob, fca):
    store.save(source.fetch())

index = store.load_index()
for match in index.check("tradoxiumpro.com"):
    print(match.relation, match.alert.authority, match.alert.published, match.alert.source_url)

MCP server

The server reads the local cache and never downloads; run warninglists fetch first. It exposes check_domain, search_entity and list_sources.

{
  "mcpServers": {
    "warninglists": { "command": "warninglists", "args": ["mcp"] }
  }
}

Reading a result

Every match has a relation:

  • listed: the queried host, registrable domain or entity name appears in an alert.
  • similar: an alert contains a look-alike domain (edit distance, confusable characters, the query as a token inside a longer label) or a name equal to the domain's label. Similarity has no direction. If you query a legitimate brand, similar entries are more likely clones of that brand than evidence against it.

Three more things to keep in mind:

  • An alert is issued by one authority for its own jurisdiction. A firm licensed in one country can be listed by a regulator of another country where it is not authorised; the authority and jurisdiction fields say which.
  • No match means these lists do not contain the query. They are not complete, and they are not a register of authorised firms.
  • Clone warnings concern firms impersonating an authorised one. For FCA clones the genuine firm is kept apart in details["impersonated_firm"] and never attributed to the clone.

How complete each source is

Each fetch records what the source makes measurable, in warninglists stats:

  • CONSOB. Every press release states how many sites it blocks and the running total. On the full archive (285 releases, 19 September 2019 to 9 October 2026) the parsed site count matches the declared count in 261 of 271 releases, and the parsed sites add up to 1,803 against a declared total of 1,838. The remaining mismatches are listed one by one; some come from the releases themselves (truncated URLs such as https://kapidexnx., and a counting unit that differs between releases). The thresholds and every correction made to the parser are in docs/verification.md.
  • I-SCAN. Date of the latest validated alert, and how many alerts carry no domain (27,542 of 47,367 on 14 October 2026: those are matchable by name only).
  • FCA. The feed holds about 20 items, roughly one week. Older FCA warnings are in I-SCAN, where the FCA is the largest contributor.

Data and terms of use

The package contains no data. Lists are downloaded on your machine, when you run fetch, and stay there. Every record keeps the issuing authority and a source_url. Before reusing the data, read each source's terms:

  • IOSCO I-SCAN: public information; reuse requires attribution and no distortion. The I-SCAN API needs a signed agreement; this package uses the public CSV export instead.
  • CONSOB: reuse for study, research, information and documentation, citing the source and without altering meaning or completeness (informazioni legali).
  • FCA: saved copies are for personal use or use within your organisation, not for redistribution (fca.org.uk/legal).

The FCA fixture in tests/ is synthetic for that reason; the I-SCAN and CONSOB fixtures are short excerpts with attribution (tests/fixtures/NOTICE.md).

From datacenter networks (CI runners, cloud VMs) the I-SCAN export has been seen to answer 403. Download the CSV from https://www.iosco.org/i-scan/ ("Export to CSV") and run warninglists fetch iosco --iosco-file <file.csv>. Requests identify themselves as warninglists/<version>; CONSOB pages are fetched two seconds apart.

Schema

Alert(
    source="consob",                 # iosco | consob | fca
    source_id="2026-10-09:goldgcapital.net",
    authority="CONSOB",              # for iosco: the member that submitted the alert
    jurisdiction="Italy",
    kind="blocked",                  # unauthorised | clone | blocked | other
    names=["Goldgcapital"],
    urls=["goldgcapital.net", "my.aipltfrm.com"],
    hosts=[...], domains=[...],      # derived; only values valid under the Public Suffix List
    emails=[...],
    published="2026-10-09",
    source_url="https://www.consob.it/documents/d/area-pubblica/comunicato-stampa-del-9-ottobre-2026",
    details={...},                   # source-specific: sites vs pages, categories, impersonated firm
)

Domains are handled with the Public Suffix List only: unknown TLDs are rejected, so tokens such as decreto.crescita in free text never become domains. Two traps remain that the PSL cannot see, because .analytics and .target are real TLDs: script code is stripped from pages before parsing.

License

MIT for the code. The data belongs to the issuing authorities and follows their terms.

Metadata

Release files for warninglists 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for warninglists 0.1.0
File Size Uploaded
warninglists-0.1.0.tar.gz 43.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for warninglists 0.1.0
File Interpreter ABI Platform
warninglists-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 73.7 kB

Release files / warninglists-0.1.0.tar.gz

Download URL warninglists-0.1.0.tar.gz
Size 43.2 kB
Tags Source
SHA-256 checksum
How to use checksums
bf2aa9f0a9e3ca05b7f1d0e8904c3c309d445bcb7bd2a9f3dbdf863decbd113e
BLAKE2b-256 checksum
How to use checksums
198242d15fb8a9740b681e63e19002ce76e0892080c5b89fd76b387704f92f51
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 14, 2026.

Transparency log

Release files / warninglists-0.1.0-py3-none-any.whl

Download URL warninglists-0.1.0-py3-none-any.whl
Size 30.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
b6accc459c18e675122dc11cb9986036be53e8b0ee178ac64fe5d12a5a555230
BLAKE2b-256 checksum
How to use checksums
c89127d0caccfd3b09e103e9e36959969593a75a59d15f4f2d70cfbbd013d734
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 14, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page