Decision pipeline

Every 10 minutes we run a cycle that goes through 4 stages. Only items that clear all get saved as incidents.

  1. Collect. We poll RSS + Telegram + Reddit + ADL + Bellingcat in parallel. ~200 RSS feeds + ~90 subreddits + ~35 Telegram channels + ADL + Bellingcat. 800-1500 items per cycle, 31 matching languages.
  2. Junk filter. Drop Google Translate artifacts ("please select two distinct languages", etc.), widgets, and texts that are too short. See lib/junk-filter.mjs.
  3. Keyword match. The item must mention at least one word from our lexicon (see below). This is the filter that colors items red in the LIVE feed.
  4. Classify. Matched items go to the LLM (Groq llama-3.3-70b-versatile) which extracts country + type + severity + ES/EN translations. If Groq rate-limits, retry with a smaller model (llama-3.1-8b-instant); on full network failure, fall back to Anthropic Claude Haiku or Google Gemini Flash; if everything fails, local heuristic.

Lexicon — 31 languages

Keyword matching is the most visible filter. An item enters the antisemitism feed only if it contains at least one of these roots (case-insensitive, substring). We cover:

LanguageExample keywords
🇸🇦 العربية (Arabic)معاد للسامية, يهود, المحرقة, نازي
🇧🇬 Български (Bulgarian)антисемит, синагога, евреи, еврейск, холокост, нацист, свастика
🇨🇿 Čeština (Czech)antisemit, antisemitismus, synagoga, žid, žido, holokaust, šoa, nacista, hákový kříž
🇩🇰 Dansk (Danish)antisemit, synagoge, jøde, jøder, jødisk, holocaust, shoah, nazist, hagekors
🇩🇪 Deutsch (German)antisemit, synagoge, jüdisch, juden, holocaust, shoah, hakenkreuz, holocaustleugnung
🇬🇷 Ελληνικά (Greek)αντισημιτ, συναγωγή, εβραί, εβραϊκ, ιουδα, ολοκαύτωμα, σοά, ναζί, σβάστικα, κιπά
🇬🇧 Englishantisemit, synagogue, jewish, holocaust, shoah, nazi, swastika, yarmulke, kippah, tefillin
🇪🇸 Español (Spanish)antisemit, antisemita, sinagoga, judío, holocausto, shoah, nazi, neonazi, esvástica, kipá, daia, amia
🇪🇪 Eesti (Estonian)antisemit, sünagoog, juut, juudi, holokaust, natsi, haakrist
🇫🇷 Français (French)antisémit, synagogue, juif, juive, holocauste, shoah, svastika, croix gammée, kippa, crif
🇮🇱 עברית (Hebrew)אנטישמי, יהוד, בית כנסת, שואה, נאצי, כיפה
🇭🇷 Hrvatski (Croatian)antisemit, sinagoga, židov, židovsk, holokaust, nacist, kukasti križ
🇮🇸 Íslenska (Icelandic)andgyðing, gyðingahat, samkunduhús, gyðing, helför, nasist, hakakross
🇮🇹 Italiano (Italian)antisemit, sinagoga, ebreo, ebrei, olocausto, shoah, svastica, croce uncinata
🇱🇻 Latviešu (Latvian)antisemīt, sinagoga, ebrej, holokaust, nacist, kāškrust
🇲🇰 Македонски (Macedonian)антисемит, синагога, евреин, еврејск, холокауст, нацист, свастика
🇭🇺 Magyar (Hungarian)antiszemit, zsinagóga, zsidó, holokauszt, náci, horogkereszt
🇳🇱 Nederlands (Dutch)antisemit, synagoge, joods, jodendom, holocaust, hakenkruis, keppeltje
🇳🇴 Norsk (Norwegian)antisemitt, synagoge, jøde, jøder, jødisk, holocaust, nazist, hakekors
🇵🇱 Polski (Polish)antysemit, synagoga, żyd, żydow, żydowsk, holokaust, swastyka, jarmułka
🇵🇹 Português (Portuguese)antissemit, sinagoga, judeu, holocausto, suástica, quipá
🇷🇴 Română (Romanian)antisemit, sinagog, evreu, evrei, evreic, holocaust, nazist, svastică
🇷🇺 Русский (Russian)антисемит, синагог, еврей, иудей, холокост, нацис, свастик
🇷🇸 Српски / Srpski (Serbian)антисемит, синагога, јеврејин, холокауст / antisemit, jevrej, holokaust, nacist
🇸🇰 Slovenčina (Slovak)antisemit, synagóga, žid, žido, holokaust, šoa, nacista, hákový kríž
🇸🇮 Slovenščina (Slovenian)antisemit, antisemitizem, sinagoga, žid, judov, holokavst, šoa, nacist, kljukasti križ
🇦🇱 Shqip (Albanian)antisemit, antisemitizm, sinagogë, hebre, hebrenj, hebraik, holokaust, nazist, svastikë
🇫🇮 Suomi (Finnish)antisemitismi, synagoga, juutalais, holokaust, natsi, uusnatsi, hakaristi
🇸🇪 Svenska (Swedish)antisemit, synagoga, jude, judar, judisk, förintelsen, shoah, nazist, nynazist, hakkors, kippa
🇹🇷 Türkçe (Turkish)antisemit, antisemitik, sinagog, yahudi, yahudiler, holokost, şoa, nazi, gamalı haç
🇺🇦 Українська (Ukrainian)антисеміт, синагог, єврей, голокост, нацис, свастик

The full lexicon lives in lib/language.mjs. If you spot a false positive or a missing keyword, let us know.

What is NOT antisemitism (per the pipeline)

An item with a keyword match is not automatically an incident. To be saved as an incident, it must also meet three conditions:

  • Describe something concrete. The LLM rejects ~16 generic templates like "antisemitic hate speech on social media", "antisemitic vandalism", "threat to Jewish community" — empty patterns. There must be place + actor + action.
  • Minimum 25 characters of description. Below that we drop tags, metadata, fragments.
  • The description must mention a keyword again. If the LLM paraphrases and loses the antisemitism angle, we drop it — that means the classification drifted off-topic.

Additionally, the Monitor does NOT classify as antisemitism:

  • Criticism of State of Israel policy per se (distinguished from attacks on Jews or Jewish institutions — IHRA line).
  • News where "Israel" appears as collateral topic, without context of aggression, legislation, speech or attack against Jews.
  • Statements by the State of Israel itself (LLM prompts drop these as not incidents).
  • Satirical, artistic or editorial content that does not describe a concrete fact.

AI classification

Items that pass keyword matching are sent to the LLM with this prompt (summary):

You're a GLOBAL antisemitism analyst. Identify CONCRETE INCIDENTS
— attacks on synagogues / Jewish cemeteries, physical assault, nazi
vandalism, hate speech by public figures, discriminatory legislation,
boycotts, Holocaust denial, threats to Jewish communities.

For each one:
  country   → ISO-3166 alpha-2 code
  type      → attack | vandalism | hate_speech | legislation | boycott |
              denial | threat
  severity  → low | medium | high | critical
  description_es / description_en → mutual translations of the SAME
              concrete fact, with place + actor + action
  original_language → source language
  sourceIdx → source item [N] number

Primary model: llama-3.3-70b-versatile on Groq, temperature: 0.15, response_format: json_object, max 80 items per call.

Fallback chain

The classifier has several recovery layers when something fails, in order:

  1. Groq rate limit (HTTP 429): 20s backoff and retry with the smaller llama-3.1-8b-instant model (separate rate-limit bucket), batch reduced to 40.
  2. Groq network failure (DNS, fetch failed): if ANTHROPIC_API_KEY is set, retry with Claude Haiku 4.5; otherwise with Gemini Flash 2.0 (free tier). Both keep JSON mode and the same output shape.
  3. All providers down: local heuristic that assigns type: "hate_speech", severity: "low", detects country via aliases (lib/country-aliases.mjs) or falls to ZZ (global), and doesn't translate — stores the source text as-is in both ES/EN fields. The next cycle with an LLM available can re-classify from raw_text.

Cross-source corroboration

When the same fact appears in more than one independent outlet, we mark it as verified. On the dashboard this is the "verified only" filter toggle; in the RSS feed only verified items are included by default.

The math is simple:

  • Each incident has a source_count field with the number of outlets that reported it. It increments every time dedup collapses another item to the same hash.
  • source_count >= 2verified (✓).
  • credibility_score is an additional weight that combines quantity of sources and quality (an ADL or Bellingcat report weighs more than a random Telegram channel). Lives in lib/source-credibility.mjs.

Verified does NOT mean "fact-checked by us" — it means the event was reported by at least two distinct outlets we monitor. For academic or legal use, the same caveat applies: cross-check against the primary sources.

How the continental index is computed

The Antisemitism by continent · 30 days index above the feed is an absolute score: each continent has its own number that moves up and down independently of the others. Previously the index was relative (max-normalized to 0-100), but that pegged the most active continent at 100 every render and gave the false impression of a "permanent ceiling". Now each continent lives in a fixed categorical band.

Formula

score(continent) = Σ [ severity_weight(inc) × freshness(inc) ]
     where
        severity_weight = { low: 1, medium: 2, high: 4, critical: 8 }
        freshness(inc)  = max(0, 1 - days_old / 30)   // linear decay

(rounded to 1 decimal)

Bands (fixed thresholds)

BandScore (raw)Typical meaning
Calm0 – 0.5no detected activity, or one-off mention
Low0.5 – 51-5 low-severity incidents or 1-2 medium in the month
Moderate5 – 20sustained mid-level volume or some high-severity events
Elevated20 – 50several high-severity incidents, recurring activity
Critical50+cluster of recent severe incidents

Example

If MENA gets 10 high incidents in the last week, contribution is 10 × 4 × ~0.8 = 32 → band Elevated. If LATAM has 2 low incidents from 25 days ago, contribution is 2 × 1 × ~0.16 = 0.32 → band Calm. The two numbers live independently; LATAM doesn't look "lower" because of MENA.

The dashboard's visual bar caps at 50 (a score of 50 fills the bar). Above 50 the bar stays full but the absolute number keeps growing in the label. Prevents an outlier continent from visually compressing the others.

Continent bucketing

ISO-3166 alpha-2 code in parentheses. Continents and countries alphabetical.

  • Asia (22): Afghanistan (AF), Bangladesh (BD), Cambodia (KH), China (CN), Hong Kong (HK), India (IN), Indonesia (ID), Japan (JP), Kazakhstan (KZ), Malaysia (MY), Mongolia (MN), Myanmar (MM), Nepal (NP), Pakistan (PK), Philippines (PH), Singapore (SG), South Korea (KR), Sri Lanka (LK), Taiwan (TW), Thailand (TH), Uzbekistan (UZ), Vietnam (VN).
  • Europe (41): Albania (AL), Austria (AT), Belarus (BY), Belgium (BE), Bosnia (BA), Bulgaria (BG), Croatia (HR), Cyprus (CY), Czech Republic (CZ), Denmark (DK), Estonia (EE), Finland (FI), France (FR), Germany (DE), Greece (GR), Hungary (HU), Iceland (IS), Ireland (IE), Italy (IT), Kosovo (XK), Latvia (LV), Lithuania (LT), Luxembourg (LU), Malta (MT), Moldova (MD), Montenegro (ME), Netherlands (NL), North Macedonia (MK), Norway (NO), Poland (PL), Portugal (PT), Romania (RO), Russia (RU), Serbia (RS), Slovakia (SK), Slovenia (SI), Spain (ES), Sweden (SE), Switzerland (CH), Ukraine (UA), United Kingdom (UK).
  • LATAM (20): Argentina (AR), Bolivia (BO), Brazil (BR), Chile (CL), Colombia (CO), Costa Rica (CR), Cuba (CU), Dominican Rep. (DO), Ecuador (EC), El Salvador (SV), Guatemala (GT), Haiti (HT), Honduras (HN), Mexico (MX), Nicaragua (NI), Panama (PA), Paraguay (PY), Peru (PE), Uruguay (UY), Venezuela (VE).
  • MENA (21): Algeria (DZ), Bahrain (BH), Egypt (EG), Iran (IR), Iraq (IQ), Israel (IL), Jordan (JO), Kuwait (KW), Lebanon (LB), Libya (LY), Morocco (MA), Oman (OM), Palestine (PS), Qatar (QA), Saudi Arabia (SA), Sudan (SD), Syria (SY), Tunisia (TN), Turkey (TR), UAE (AE), Yemen (YE).
  • North America (2): Canada (CA), USA (US).
  • Oceania (2): Australia (AU), New Zealand (NZ).
  • Sub-Saharan Africa (16): Angola (AO), Cameroon (CM), DRC (CD), Ethiopia (ET), Ghana (GH), Ivory Coast (CI), Kenya (KE), Mozambique (MZ), Namibia — coverage via regional feeds, Nigeria (NG), Rwanda (RW), Senegal (SN), South Africa (ZA), Tanzania (TZ), Uganda (UG), Zambia (ZM), Zimbabwe (ZW).

Incidents without a detectable country (ZZ) appear in the timeline but don't enter the continental index — they have no continent to sum to.

What the index is NOT

  • It is NOT an absolute ranking of "where more Jews are at risk". A continent with less media coverage will show a low score even if the reality is worse.
  • It does NOT measure perception or public opinion. Only incidents classified by the pipeline — see section above.
  • It does NOT sum years: the 30-day window caps the horizon, and the decay makes an incident from 29 days ago barely count. For historical analysis, use /api/incidents?since=… directly.
  • It is NOT per-capita. ADL/CST publish stats normalized by Jewish population; we don't, because population estimates vary. This score is pure weighted volume.

Sources monitored

Every incident we save has a clickable source_url field. Sources, alphabetical:

  • ADL — direct feed from the Anti-Defamation League.
  • Bellingcat — OSINT investigations on extremism.
  • Newswires RSS — ~200 outlets in 31 languages. Regions and outlets alphabetical:
    • Africa: allAfrica (general + Ethiopia + Ghana + Kenya + Nigeria), BBC Afrique (Francophone), Daily Maverick, Mail & Guardian, South African Jewish Report, Standard Media (KE), The Citizen (SA), The Namibian, This Day (NG).
    • Asia-Pacific: ABC Australia, Australian Jewish News, Bangkok Post, Channel News Asia, Dawn (Pakistan), Geo News, Global Times, Japan Times, Korea Herald, Korea Times, NDTV, Nikkei Asia, RNZ, SBS, SCMP, SMH, Straits Times, The Conversation AU, The Daily Star (Bangladesh), The Hindu, Times of India, TOI World, Xinhua, Yonhap.
    • Balkans: Balkan Insight, Danas (RS), Delo (SI), ERT News, Greek Reporter, Index.hr, Koha (Kosovo), N1 Serbia, Naftemporiki, Neos Kosmos (diaspora), Politika (RS), RTV Slovenia, Telegrafi, To Vima, tportal (HR), Vijesti (ME).
    • Baltics: 15min Lithuania, Baltic Times, ERR Estonia, LSM Latvia (EN+LV), Postimees (ET).
    • Central Europe: ABC Spain, ANSA, BBC World, Corriere, Corriere Esteri, Der Standard (AT), DW, Economist, El Mundo, Euronews (EN+ES), France Info, FT, Gazeta Wyborcza, Guardian, Le Monde, Libération, Meduza, NOS (NL), Notes from Poland, NV Ukraine (EN), OKO.press, Politico EU, Repubblica, Spiegel, Tagesschau, The Independent, TVN24, Ukrainska Pravda, Zeit.
    • Eastern Europe / CEE: České noviny, Deník N (CS), Denník N (SK), Digi24 (RO), HotNews, Hungary Today, iDNES, Meta.mk, Republika (MK), Seznam Zprávy, Sofia Globe (BG), Telex (HU), Ziarul de Gardă (MD).
    • Jewish press / antisemitism monitors: ADL, ADL Antisemitism Uncovered, AJC, Algemeiner, Amadeu Antonio Stiftung (DE), Arutz Sheva, Campaign Against Antisemitism (UK), Combat Antisemitism Movement, Forward, Haaretz (HE+EN), Hope Not Hate (UK), i24News, Israel Hayom, JCPA, Jerusalem Post, Jewish Chronicle UK, Jewish Journal, Jewish News UK, Jewish Press, JNS, JTA, Moment, NGO Monitor, Times of Israel, YNet.
    • LATAM: 14ymedio, Aristegui, Ámbito, BBC Mundo, Chequeado, Clarín, Cronista, El Comercio PE, El Deber BO, El Mundo SV, El País (Spain), El País UY, El Tiempo CO, Emol, Enlace Judío MX, Estadão, Folha, France 24 (ES), InSight Crime, Jornada Mundo, La Jornada, La Nación AR, La Prensa PA, La Tercera, Los Tiempos, Página Siete, Perfil, Prensa Libre GT.
    • MENA: Al Jazeera (EN+AR), Al-Monitor, Anadolu Agency (Turkey), Arab News, Asharq Al-Awsat, Daily Sabah, Egypt Independent, Egyptian Streets, Fanack, Hürriyet, Hürriyet Daily News, Mehr News, Middle East Eye, Middle East Monitor, Morocco World News, Tehran Times, The Arab Weekly, The National UAE.
    • Nordic: Aftonbladet, Dagens Nyheter, DR (DK), Helsingin Sanomat, NRK (NO), RÚV (IS), SVT, Yle Finland (EN).
    • North America: ABC News, CBC, Fox News, Newsweek, NYT, WSJ.

    The full list lives in apis/sources/newswires.mjs. New feeds added there enter the next cycle automatically.

  • Reddit — ~75 subreddits. Dedicated: r/antisemitism, r/Holocaust, r/HolocaustHistory, r/IsraelPalestine, r/Israel, r/Jews, r/JewsOfConscience, r/Judaism, r/jewishevents. Aggregators: r/africa, r/asia, r/EuropeanPolitics, r/europe, r/geopolitics, r/MiddleEastNews, r/news, r/politics, r/worldnews, r/worldpolitics. Country/region (alpha): r/argentina, r/australia, r/austria, r/bangladesh, r/bosnia, r/brasil, r/bulgaria, r/Chile, r/china, r/colombia, r/croatia, r/czech, r/denmark, r/deutschland, r/egypt, r/Estonia, r/Ethiopia, r/Finland, r/france, r/germany, r/greece, r/hungary, r/iceland, r/india, r/indonesia, r/iran, r/ireland, r/italy, r/japan, r/Kenya, r/korea, r/latinamerica, r/latvia, r/lebanon, r/lithuania, r/malaysia, r/mexico, r/Netherlands, r/newzealand, r/Nigeria, r/norway, r/pakistan, r/palestine, r/peru, r/philippines, r/poland, r/polska, r/Romania, r/russia, r/serbia, r/slovakia, r/slovenia, r/southafrica, r/spain, r/sweden, r/syria, r/turkey, r/ukpolitics, r/ukraine, r/unitedkingdom, r/uruguay, r/venezuela.
  • Telegram — ~35 public channels with /s/ preview (alpha): @algemeiner, @alertacolombia, @alertamundialnews, @animalpolitico, @cibercuba, @ClarinCom, @crhoy, @cronicauno, @cubanosporelmundo, @diariolibre, @elcomercioperu, @eldestapeweb, @elheraldohn, @estadao, @fastcheckcl, @folha, @g1noticias, @infobae, @jerusalem_post, @jtanews, @laprensani, @lemonde_fr, @lenouvelliste, @meduzalive, @NHK_WORLD, @OSINTdefender, @pagina12, @primiciasec, @rainews, @revistaistoe, @scmp_news, @sinembargomx, @spiegel_online, @tehran_times, @Times_of_Israel, @welt_de.

Dedup and persistence

Dedup runs in two layers to collapse the same news reported by multiple outlets into a single row (with its source_count incremented — see corroboration):

  1. Exact hash: each incident gets a sha1(country|type|description_prefix_120). If two classifications produce identical hashes, they merge automatically.
  2. Fuzzy second-pass: when the hash misses, we compare the description against the last 50 incidents of the same country and type from the past 48h. We use normalized Levenshtein distance (edit_distance / max_length, on lowercase + diacritic-stripped + article-stripped text). Similarity ≥ 85% (ratio ≤ 0.15) triggers a merge. This catches cases where two outlets phrase the same event slightly differently — "Assault outside synagogue..." vs "Assault outside a synagogue..." — variations the hash alone can't group.

For short texts (< 30 normalized characters) the threshold tightens to 7.5%, because each word weighs much more — "Synagogue attacked in Berlin" vs "...in London" has high apparent similarity but they're distinct events. The 48h cap prevents two similar-but-time-separated events from being wrongly merged.

Storage: SQLite with WAL mode + automatic daily backups. The incidents table is append-only — we don't delete history; incidents only grow in source_count and credibility_score as corroborations arrive.

How to access the data

Seven ways to consume the Monitor depending on your use case:

  • Web dashboardantisemitismo.kavnes.com. Live visualization with continental index, LIVE feed, filters and timeline. For general browsing.
  • Browsable archive/archive. Full-text search (FTS5) over the entire history, filters by country / type / severity / date range / verified, and CSV export of the results. For historical research or specific citations.
  • Weekly email digest — Free subscription with double opt-in (from the home page). Arrives Fridays 9am ART with a brief editorial narrative, the week's top incidents ranked by credibility, and the updated continental index. No spam, one-click unsubscribe.
  • RSS feed/rss (subscription instructions) or /incidents.rss (raw XML for readers). Default includes verified incidents only (≥2 sources). Accepts query-string filters: ?country=AR, ?type=attack, ?severity=high, ?lang=en, ?verified=0 for all.
  • Embeddable widget/embed. Ready-to-paste iframe showing the live continental index. Designed for journalists / NGOs / blogs who want to cite the index on their own pages. Refreshes itself every minute, no cookies, CSP frame-ancestors *.
  • JSON API — for programmatic use: /api/incidents, /api/index/continent, /api/countries, /api/search, /api/stream. Full endpoint documentation with params, curl examples and response shapes. No auth, rate-limited to reasonable use.
  • Per-source track record/sources. Volume of incidents contributed by each outlet, corroboration rate (how often other sources confirm), and geographic breadth.

The data we generate (classification, translations, scores) is licensed CC BY 4.0 — use freely with attribution. The original news text belongs to the respective outlets.

Honest limitations

  • Biased LLM classification. Models carry inherited biases. Severity classification is especially noisy — use as indicator, not absolute truth.
  • False negatives. An attack using euphemistic language (e.g. "zionist" without mentioning Jews) may not trigger the lexicon.
  • False positives. The heuristic sometimes flags analytical articles that mention "antisemitism" without a concrete fact. The validator filters them but not always.
  • Coverage bias. If an incident doesn't appear in any outlet we monitor, it doesn't exist for the Monitor. Small communities or countries with censored press are underrepresented.
  • Imperfect translation. ES and EN descriptions are LLM output, not human translation. For citation purposes, always go back to the original source (source_url field).
  • Fuzzy dedup false-collapses. The second-pass that merges descriptions with ≥ 85% similarity (see dedup) has a low but non-zero error rate. Genuinely distinct events with very similar phrasing and the same country+type within 48h can collapse to one row. Merged incidents stay traceable via additional_sources, but the visible description will be a single one.
  • Source metrics measure volume, not accuracy. The track record at /sources measures how many incidents each outlet contributes and how often others confirm. It does NOT measure real accuracy (that would require manual ground-truth). A "tier 5" outlet can be just as reliable as a "tier 10" in its niche.

How to cite this work

The Global Antisemitism Monitor is a public, free resource. If you use it in a story, report, paper or publication, please cite it like this:

Short citation (general)

Global Antisemitism Monitor (2026). antisemitismo.kavnes.com
[accessed: YYYY-MM-DD]

Citing a specific incident

Each incident has a stable-ID permalink. Cite as:

Global Antisemitism Monitor (2026). "Attack on synagogue in Villa Crespo."
antisemitismo.kavnes.com/inc/1234 [accessed: YYYY-MM-DD]
Primary source: {original outlet URL}

Always also cite the primary source (source_url) — the Monitor is an aggregator, not a reporter. Our classification is heuristic/AI and can be wrong. For academic or legal use, verify against the original outlet.

Citing the continental index

Global Continental Antisemitism Index, Global Antisemitism Monitor (2026).
antisemitismo.kavnes.com/methodology#continental-index
Window: last 30 days. Absolute weighted score, categorical band.

BibTeX format

@misc{monitor_antisemitism_2026,
  title  = {Global Antisemitism Monitor},
  author = {Kavnes, LLC},
  year   = {2026},
  url    = {https://antisemitismo.kavnes.com},
  note   = {Accessed: YYYY-MM-DD}
}

Data license

The metadata we generate (classification, translation, score) can be used freely with attribution (CC BY 4.0). The original text of each news item belongs to the respective outlet — respect their license when reproducing content.

Contact

Inquiries, corrections, collaborations or source suggestions:

micaela@kavnes.com

If you see a misclassified incident or an antisemitism news item we missed, send the link and we'll review manually. Requests that include the primary source URL get priority.