Beta

This platform is in public beta. Most features are fully operational — some are still under active development and may be incomplete or behave unexpectedly.

Antisemitic Incident Tracker

Transparency Protocol

Data Methodology

Our mission is to provide accurate, real-time intelligence on antisemitic activity. To maintain integrity, the platform is fully transparent about how data is sourced, categorized, and analyzed.

Incident Sourcing

The platform aggregates incidents from a wide array of publicly available news media. Articles are fetched from multiple global news APIs, including the ADL Incident Tracker and various regional reporting bureaus.

  • Semantic deduplication: Beyond exact URL/title matching, a MinHash/LSH similarity engine merges paraphrased coverage of the same real-world event across outlets. Pairs scoring ≥0.75 on a composite of text similarity, shared named entities, date proximity (±2 days), and geographic proximity merge automatically; 0.50–0.75 pairs go to an analyst review queue. One event, N attached sources.
  • Corroboration: Every confirmed cross-outlet merge counts as independent corroboration — it raises the record's credibility grade and feeds each outlet's reliability track record. Outlets sharing a parent organization or carrying wire copy do not count as independent.
  • Stable identifiers: Every published incident carries a permanent AIT-YYYY-NNNNN id. Records are never silently rewritten — post-publication changes stream through the public corrections feed.
  • Language Detection: Non-English articles are detected and tagged for translation.
  • Source Integrity: Each incident maintains direct links back to every reporting outlet, plus a SHA-256 evidence-vault snapshot of the primary source.

Severity & Categorization

Incidents are categorized algorithmically based on NLP analysis of the article text. The following categories are used:

Physical Assault

Direct physical violence or attempted harm.

Harassment

Targeted verbal or written abuse.

Vandalism

Property damage or antisemitic graffiti.

Threats

Specific, credible threats of violence.

Intelligence Grading Doctrine

Every record is graded by a deterministic engine that encodes professional analytic tradecraft — no machine-learning APIs, every judgment reproducible and auditable.

  • NATO Admiralty System: source reliability (A–F) and item credibility (1–6) are assessed by separate functions sharing no inputs. Reliability comes from each outlet's evolving track record (40% structural baseline, 60% empirical accuracy from corroboration and detected retractions — published in full at /api/v1/sources). Credibility 1 (“Confirmed”) requires at least two independent outlets.
  • ICD-203 estimative language:probabilities are stored as numbers and rendered with the IC standard vocabulary (“likely (55–80%)”), and every confidence call ships with its drivers (“because”) and what evidence would change it.
  • Negation-aware classification:signals are matched at word boundaries with NegEx-style scoping, so “no weapons were found” or “debunked as a hoax” suppress rather than trigger severity. Every fired rule records the exact text span — the evidence ledger shown in the analyst workbench.
  • Triple taxonomy coding:each incident is coded to CST's six-tier scale (UK), ADL audit categories, and FBI NIBRS offense + bias-motivation codes (Anti-Jewish = 12) so the dataset reconciles against any published official statistic.
  • Competing hypotheses: reports grading doubtful are run through an ACH matrix (hate incident / non-bias crime / hoax / misattribution) ranked by weighted inconsistency — disconfirmation, not confirmation, drives the call.
  • Human-on-the-loop with audit: analysts can override any machine grade, but only with a stated rationale; overrides and all post-publication changes are written to a SHA-256 hash-chained audit log and surfaced through the corrections feed.

Policy Correlation Analysis

The Policy Impact Analysis measures the observable shift in incident rates following the enactment of a specific piece of legislation.

The 6-Month Window Rule

The analysis compares the total number of incidents in the 6 months before a law is passed against the 6 months after its enactment. Results are normalized to account for general reporting trends.

Public API Reference

All incident data is available via a free, public REST API. No authentication required. CORS is enabled for cross-origin requests from any domain.

GET/api/v1/incidents

Returns paginated incident data with optional filters. Supports JSON and CSV output.

Query Parameters

ParameterTypeDescription
qstringFull-text search over title, description, and location (SQLite FTS5).
categorystringFilter by category (e.g. "Harassment", "Physical Assault", "Vandalism", "Threats").
locationstringPartial match on location (case-insensitive).
sincedateInclude incidents on or after this date (YYYY-MM-DD).
untildateInclude incidents on or before this date (YYYY-MM-DD).
severity_minintMinimum severity score (1–10).
severity_maxintMaximum severity score (1–10).
statusstring"verified" or "pending_review".
sortstring"date" (default) or "severity".
pageintPage number (default: 1).
limitintResults per page (default: 50, max: 500).
formatstring"json" (default) or "csv".
GET/api/v1/stats

Returns aggregate statistics: total counts, breakdowns by category, location, month, and verification status. No parameters required.

Institutional Data Egress

GET/api/v1/export

Bulk export of the full verified dataset — no pagination cap, stable AIT ids, citable metadata header. ?format=csv|jsonl|stix and ?preset=full|nibrs (NIBRS-aligned columns for police cross-walks). Licensed CC BY 4.0.

GET/api/v1/corrections

Append-only corrections & amendments feed: every post-publication change (merges, status changes, grade overrides) with rationale. Poll with ?since= to keep re-published copies honest.

GET/api/v1/sources

The living source-reliability registry: every outlet’s Admiralty grade with the structural baseline and empirical track record (confirmed / contradicted / retractions) that produced it.

GET/api/v1/graph

Intelligence graph: ?around=<object_id>&depth=1..3 returns the typed object/link neighborhood (events, actors, organizations, institutions, locations, sources).

GET/taxii2/

TAXII 2.1 discovery. Verified incidents as STIX 2.1 incident objects with per-record confidence mapped from Admiralty grading — subscribe natively from OpenCTI, ThreatConnect, or any TAXII client.

GET/api/v1/stix

One-shot STIX 2.1 bundle download (Incident SDOs carrying the official OASIS Incident Core Extension, city-level Location SDOs, court-record-verified threat actors only). ?limit= and ?since= filters. Companion MISP taxonomy at /taxonomies/antisemitism/machinetag.json.

GET/api/v1/official-stats

Official government anti-Jewish hate-crime series, normalized to one shape: FBI Crime Data Explorer (national + state, incl. provisional partial-year figures), NY DCJS county data, and Statistics Canada quarterly preliminary counts. ?source=&jurisdiction=&from=&to=&format=json|csv. Reconcile OSINT counts against authoritative baselines.

GET/api/v1/prosecutions

Federal prosecution milestones for antisemitism-related cases, discovered from DOJ press releases and tracked end-to-end (Arrested → Charged → Indicted → Guilty Plea → Convicted → Sentenced). ?status=&defendant=&format=json|csv.

GET/api/v1/advisories

DHS National Terrorism Advisory System bulletins mirrored from the official feed — the national threat-posture overlay. An empty list means DHS currently has no active advisories.

GET/api/gdelt-live

Live GeoJSON layer of worldwide media mentions carrying GDELT’s machine-coded REL_ANTISEMITISM theme (65 languages, 15-minute cadence, rolling 7-day window). Media mentions — NOT verified incidents. ?hours=1..168.

Data Dictionary — /api/v1/export (full preset)

FieldTypeDefinition
public_idstringPermanent citable id (AIT-YYYY-NNNNN). Never reused, never rewritten.
date / location / lat / lngmixedEvent date (ISO 8601) and city-level geography. Coordinates are never finer than city/district.
categorystringPlatform category (Physical Assault, Vandalism, Threats, Harassment, Propaganda, Other).
cst_categoryenumCST six-tier code: EXTREME_VIOLENCE, ASSAULT, DAMAGE, THREATS, ABUSIVE, LITERATURE, OTHER.
adl_categoryenumADL audit category: Assault, Vandalism, Harassment.
nibrs_offense / nibrs_bias_codestring / intFBI NIBRS offense code crosswalk and bias-motivation code (12 = Anti-Jewish).
severity_score / severity_labelint / enum1–10 scale; CRITICAL ≥ 9, HIGH 7–8, MEDIUM 4–6, LOW ≤ 3.
admiralty / reliability / credibilitystring / char / intCombined Admiralty code (e.g. B2) and its two axes. Credibility 1 requires ≥2 independent outlets.
confidence / probability_termenum / stringICD-203 confidence (high/moderate/low) and word of estimative probability with its percentage band.
corroborating_outletsintCount of independent outlets attached to this event by the dedup engine.
evidence_sha256hexSHA-256 of the archived primary-source snapshot in the evidence vault.

Code Examples

cURL
# Get all incidents as JSON
curl "https://antisemitic-incidents-tracker.onrender.com/api/v1/incidents"

# Filter by location and date range
curl "https://antisemitic-incidents-tracker.onrender.com/api/v1/incidents?location=new+york&since=2025-01-01&limit=100"

# Download as CSV
curl -o incidents.csv "https://antisemitic-incidents-tracker.onrender.com/api/v1/incidents?format=csv&limit=500"
Python
import requests

response = requests.get(
    "https://antisemitic-incidents-tracker.onrender.com/api/v1/incidents",
    params={"category": "Physical Assault", "limit": 100}
)
data = response.json()
print(f"Total: {data['meta']['total']} incidents")
for incident in data["data"]:
    print(f"  {incident['date']} - {incident['title']}")
JavaScript
const res = await fetch(
  "https://antisemitic-incidents-tracker.onrender.com/api/v1/incidents?location=california&sort=severity"
);
const { meta, data } = await res.json();
console.log(`Page ${meta.page} of ${meta.totalPages}`);
data.forEach(inc => console.log(inc.title, inc.severity_label));

Example JSON Response

JSON
{
  "meta": {
    "total": 487,
    "page": 1,
    "pageSize": 50,
    "totalPages": 10,
    "lastUpdated": "2026-04-05T15:00:00.000Z"
  },
  "data": [
    {
      "id": "AIT-2026-00421",
      "internal_id": "abc123def456",
      "title": "Swastika found at university campus",
      "description": "...",
      "date": "2026-03-15",
      "location": "New York, NY, USA",
      "lat": 40.71, "lng": -74.01,
      "category": "Vandalism",
      "severity_score": 6,
      "severity_label": "MEDIUM",
      "threat_priority": "MEDIUM",
      "admiralty": "B2",
      "corroborating_outlets": 3,
      "source": "JTA",
      "url": "https://...",
      "status": "verified"
    }
  ]
}

Usage Guidelines

  • No API key required — all data is public and free to use.
  • Responses are cached for 5 minutes (300s) for performance.
  • Maximum 500 results per request — use pagination for larger datasets.
  • CORS is enabled — you can call from any frontend application.
  • Please credit “Antisemitic Incidents Tracker” when using the data in publications.

Disclosure

Known Limitations

The data is limited by what is reported in the media. Many incidents go undocumented, meaning these metrics represent a floor rather than a ceiling of activity.

Last Updated: April 5, 2026