MISP Scheduled feed and live enrichment
Add the daily isMalicious blocklists as a MISP feed, pull STIX 2.1 objects from the TAXII collections with a short script, then enrich individual attributes with the expansion module.
No credit card required · Free API key
Key features. Everything you need to protect your infrastructure and users.
Native MISP feed
Sync Actions → Feeds → Add Feed with a blocklist URL and your X-API-KEY header. MISP fetches it on its own schedule.
Expansion + hover
Live /check lookups for IPs, domains, hostnames, and URLs without leaving the event.
Score and categories
Malicious flag, 0–100 risk score, threat categories, and detection source count.
Same credential
X-API-KEY, or Basic Auth with apiKey:apiSecret (legacy: password = the Base64 credential).
Use cases. How security teams use this tool.
Scheduled feed
Fetch the malicious-domains and malicious-ips lists into a feed event daily, then correlate with your own attributes.
Analyst hover
Hover an IP on an event to see the isMalicious score before expanding.
Sharing communities
Keep org-reported collections separate from the global malicious-* feeds.
isMalicious as a MISP threat feed
MISP's TAXII 2.1 support is push-only: the Servers screen syncs MISP to MISP and, from 2.4.169, pushes events to a TAXII server, but it never pulls from one. The path that works is a native feed: under Sync Actions → Feeds, add a Simple CSV feed pointing at a blocklist such as https://api.ismalicious.com/blocklist/download/blocklist-domains-critical.txt with your X-API-KEY header, and MISP fetches it on its own schedule, no plugin needed. Teams that want STIX objects rather than bare values pull the TAXII 2.1 collections at https://api.ismalicious.com/taxii2/ with taxii2-client and create events with PyMISP — the fifteen-line script on this page. Blocklists and collections are refreshed nightly, so a daily fetch picks up each day's new indicators in one pass. Neither blocklist downloads nor TAXII polls count against the monthly API quota; full blocklists need a paid plan, TAXII collections need Pro or Enterprise, and TAXII pagination is by size with a next token — up to 1,001 pages per collection on Pro, no page cap on Enterprise.
Filtering the feed by score
Every indicator in the feed carries a 0–100 risk score, threat categories, and a detection source count — the same fields the expansion module returns when an analyst hovers an attribute. Filter on score inside MISP before wiring a collection into a blocklist, so low-confidence sightings never block production traffic and analysts and automation act on one number.
Blocklist feed in MISP
- Sync Actions → Feeds → Add Feed. Source format
Simple CSV, value field1— comment lines starting with#are skipped, whereas Freetext would import the URL in the header. - URL:
https://api.ismalicious.com/blocklist/download/blocklist-domains-critical.txt. Swapdomainsforips, andcriticalforhigh,medium,low,allor a category such asphishing,c2orransomware. - Headers:
X-API-KEY: base64(apiKey:apiSecret), one header per line. A Free key returns a 10% sample, paid plans the full list. - Tick Enabled and Caching enabled, pick a distribution, run Fetch and store all feed data once, then let the daily
fetch_feedsscheduled task keep it current.
STIX objects via TAXII 2.1
MISP only pushes to TAXII 2.1 servers. To bring STIX objects in, pull the collection with taxii2-client and create the event with PyMISP (pip install taxii2-client pymisp):
from pymisp import MISPEvent, PyMISP
from taxii2client.v21 import Server
# API key and secret: https://ismalicious.com/app/account
server = Server("https://api.ismalicious.com/taxii2/", user=API_KEY, password=API_SECRET)
collection = next(c for c in server.api_roots[0].collections if c.id == "malicious-domains")
bundle = collection.get_objects(limit=1000) # add added_after="2026-09-20T00:00:00Z" on later runs
misp = PyMISP("https://misp.example.org", MISP_KEY)
event = MISPEvent()
event.info = "isMalicious malicious-domains"
for obj in bundle.get("objects", []):
if obj["type"] == "indicator":
# pattern is [domain-name:value = 'evil.example'] (ipv4-addr:value for malicious-ips)
event.add_attribute("domain", obj["pattern"].split("'")[1], comment=obj.get("name", ""))
misp.add_event(event)
Run it daily after the nightly refresh, passing added_after with the previous run's timestamp so each pass fetches only new indicators. Collections: malicious-domains, malicious-ips, malicious-urls, c2-indicators, phishing-indicators, ransomware-iocs.
Frequently asked questions.
Do I need a custom MISP plugin to ingest the feed?
What is the discovery URL?
How often is the MISP feed refreshed?
Do feed fetches count against my API quota?
Where is the expansion module?
Which attributes does the module enrich?
Ready to get started?
Join thousands of security teams using isMalicious to protect their infrastructure.
No credit card required · Free API key