Selective Disclosure

How the Police Shape the Supply of Crime Information

Ashrakat Elshehawy

University College London

Violeta Haas

Trinity College Dublin

Sascha Riaz

Singapore Management University

Crime rates are decreasing…

Property/theft: DE PKS Diebstahl insgesamt / US FBI property crime. Violent: DE PKS Gewaltkriminalität / US FBI violent crime.

…yet worries about crime are increasing

Germany United States
Roose 2021 Gallup 2023
43% feel unsafe at night 40%
66% view crime as a (very) important / serious issue 63%
62% believe crime is increasing 77%

What, then, shapes public concern about crime?

Traditional answer, traditional actor

Direct experience rare → concern tracks information exposure, not objective risk (Hale 1996; Esberg & Mummolo 2018)

News media:

  • Relative to police records, news overrepresents
    • Rare violent offenses (Ihle 2015; van Um 2015)
    • Foreign/minority suspects (Dixon & Linz 2000; Arendt et al. 2017; Hestermann 2019, 2022)
  • Exposure shapes perceptions and behavior
    • Voters link crime to out-groups + worry rises with immigration (Homola 2021; Ajzenman et al. 2023)
    • Out-group-attributed crimes trigger hate crime + raises anti-immigrant voting (Quillian & Pager 2001; Frey 2020; Couttenier et al. 2021; Riaz et al. 2024)

This study

Blind spot!
Recorded incident
No Police Press Release
Police Press Release
Media coverage of crime
Public perceptions

Police preselect what newsrooms see!

Two margins of discretion:

  1. Which incidents to publicize
  2. What details to include

→ First systematic study measuring these selection steps at scale.

Observable Context: Germany

  • Organizational structure:
    • Policing is decentralized to the 16 states
    • Overseen by a state’s Interior Ministry
  • Press releases:
    • Written by small press offices embedded in local police stations
    • Usually staffed by street-level officers
  • Reporting rules:
    • State press laws & internal directives
    • German Press Code §12.1

“As a rule, group membership should not be mentioned, unless there is a justified public interest.” (Pressekodex, Richtlinie 12.1)

Corpus construction, 2014–2025

Example: Press Release

Why an open-weight LLM

  • Why not classic NLP
    • Releases are written by hundreds of different humans, each with their own prose and linguistic conventions
    • Out-group cues are heterogeneous and contextual (nationality, appearance, accent, language)
    • Keyword/dictionary methods need stable lexicons and miss that ambiguity (Grimmer & Stewart 2013, Nelson et al. 2021)
    • Supervised classifiers need large hand-labeled data that scale poorly to many rare categories (Wilkerson & Casas 2017, Laurer et al. 2024)

→ LLMs fit this classification setting better (Gilardi et al. 2023)

  • Why open weights, self-hosted
    • Commercial APIs change and are expensive (GPT-5.5 Batch API ~$95,000)

→ DeepSeek-V4-Flash is archivable, reproducible, free and competitive with commercial APIs on political-science classification (Hilbig 2026, Spirling 2023, Higton et al. 2026)

Scale of task

  • 2.65 million press releases, 2014–2025

    2.65m releases × 3 minutes ÷ ~2,080 hours/year ≈ 64 years of human coding

  • 3.89 million events (1.5 events per release)

  • Model weights alone ~152 GB (DeepSeek-V4-Flash)

16.2 million calls on U.K.’s fastest and most powerful (11th in the world) AI supercomputer

Classification Pipeline

Classification performance

Gold standard: 500 releases hand-coded by a trained native German-speaking research assistant, following the same prompts.

Weighted F1 ≥ 0.96 on essentially every variable. On 5,000 releases, GPT-5.5 matches our coding in 96.3% of cases.

Results

Police communication filter

Only ~3.6 narrated events per 100 recorded crimes. Of those, 45% describe a suspect, and where a nationality or descriptor is named, it signals out-group in about three cases in four (74.4%).

Conditional on a release: which offenses and origins are named?

Representation by offense

Violent crime ~3× its PKS share; knife attacks ~5×.

Representation by origin

North African suspects ~7.7× overrepresented among named nationalities; German suspects ~2.6× under.

Vocabulary of ethno-racial descriptors

When a ethno-racial descriptor is given: ~72% signal out-group, often via regional labels (“southern-looking”) or speech cues (“broken German”).

Maybe it’s just the offense mix?

Representation by origin × offense

Among the suspects whose nationality they name, they overrepresent almost every non-German group relative to the recorded suspect population, within almost every offense.

Maybe they need tips?

A nationality is named more than ten times as often once the suspect is already arrested and it can no longer help find them.

Consequences for political behavior

Do these disclosures move voters?

UEDS Design

Forsa-Bus: geocoded daily survey of party preferences in Germany (>1.2 million responses in 2014–2019, 2022–2025)

Comparison within a violent crime event

Different respondents in the same police jurisdiction

Separately for releases with vs. without out-group marker

Effect on vote intentions

Violent release with marker: −0.85pp left, +1.13pp right. Same design without marker ≈ 0. Strongest among men, East Germans, and less educated. Short-term effects (1–4 day windows).

Main Findings

Police press offices amplify the very offenses and suspect groups that prior research identifies as the strongest triggers of threat perceptions (Czymara and Schmidt-Catran, 2017; Hellwig and Sinno, 2017; Ward, 2019; Riaz et al., 2024), and exposure to such crime stories shifts voters toward the political right.

Discussion

Two caveats

  1. Recorded crime ≠ all crime.
  • Crime records include offenses that come to the attention of police and the suspects they identify, which may itself carry bias (Black 1970; Knox et al. 2020; Cook & Fortunato 2023).

→ However, if bias overstates non-German share (Mansel & Albrecht 2003; Walburg 2022), our representation ratios are conservative.

  1. We observe the outcome of selection, not its mechanism.
  • Overrepresentation of non-German suspects can arise at either margin:

(i) press offices may be more likely to publish when the suspect is not German

(ii) more likely to name nationality when it is not German

→ We cannot separate the two directly. We provide a partial check with a policy implication…

Should police name suspects’ origin?

Naming every known nationality should mechanically eliminate overrepresentation of out-group suspects among named nationalities, but only to the extent that it stems from (ii) whose nationality is named

Can a disclosure rule undo the skew?

Not completely!

When naming nationality in Mecklenburg-Vorpommern became mandatory, overrepresentation of non-German suspects narrows, but does not disappear.

In a DiD

Relative to states without the rule: nationality naming jumps—especially for in-group suspects—while ethno-racial descriptors barely move.

Generalizability

Expect similar patterns where two conditions hold:

  1. Crime and immigration are tightly linked in public debate, so press offices face demand for origin information
  2. Police press offices have discretion over what to publish and what to disclose

Contributions

Contributions

Puzzle: Crime concerns ⚡ Crime records

  • Media & politics: Most prior work examines downstream effects of crime news on public opinion and behavior (e.g. Valentino 1999; Burscher et al. 2015; Couttenier et al. 2024; Ash & Poyker 2024; Keita et al. 2024; Berk 2025)

→ Because news draws heavily on police information, our findings offer a supply-side account. Part of the disconnect is produced by the state itself, before any newsroom decides to cover.

  • Bureaucratic discretion & politics: Politics can bias decisions of judges (Shayo & Zussman 2011; Riaz & Hamjediers 2025; Barilari & Zambiasi 2026); work on how the police influence politics centers on unions and reform (Carreri et al. 2026; Krishnamurthy et al. 2026; Wirsching 2026).

→ We point to another channel: discretion over what the police disclose to the public in their routine press work.

  • Bias in policing: Large literature on ethnic and racial bias in policing (Soss & Weaver 2017): stops and searches (Pierson et al. 2020; Xu et al. 2024), speech (Voigt et al. 2017; Rho et al. 2023), and use of force (Ba et al. 2021; Hoekstra & Sloan 2022). Related work shows police-generated data can themselves be selective (Mansel & Albrecht 2003; Knox et al. 2020; Cook & Fortunato 2023).

→ We show that bias extends to communication: press releases overrepresent out-group suspects even relative to official crime statistics — a baseline already skewed by systemic bias.

Individual police press offices exercise broad discretion case by case, unremarkable in isolation… millions of such judgments, however, can in the aggregate paint a picture of crime that quietly departs from reality

Thank you!

Appendix

Context

Corpus, coverage & sample

Pipeline tables & prompts

Pipeline tables

Classification prompts

Pipeline figures

Additional results & news

Additional results

News reliance

Effects & policy

Downstream effects

Policy case

Appendix Prompt 0 — Splitter — segment releases into events

# System Prompt
You classify German police press releases: decide whether the text contains one criminal incident or multiple distinct incidents, and return verbatim event_text block(s). Apply the steps below in order; stop at the first match.

# Definition
A new, distinct incident normally requires its own combination of (i) narrated criminal act or clear attempt, and (ii) its own Tatzeit and/or Tatort and/or victim/suspect constellation, compared to the previous block.

Apply the decision procedure below in order. When a step applies, stop.

# Step 1 — Single incident, do NOT split → "S"
Code "S"  (exactly one event_text = full release verbatim) if ANY of the following holds:
- One narrated crime or attempt, typically with one Tatzeit/Tatort and one clear constellation of victim(s)/suspect(s).
- Same Tat, multiple labels (e.g. Einbruch + Sachbeschädigung in one break-in).
- Follow-up on same case ("wie bereits berichtet", "Nachtrag", update/arrest).
- One ongoing episode (pursuit, raid, single Einsatz in phases).
- Linked acts: same perpetrator(s) or one inquiry — "gleiche Täter", "Tatzusammenhang", "im Zusammenhang", "in beiden Fällen", "Hinweise in beiden Fällen", "Fachkommissariat", "im selben Verfahren".
- Linkage uncertain: "Tatzusammenhang … noch unklar", "Ob es sich um die gleichen Täter handelt …".
- One-spate/one-frame: related crimes sharing same time window + shared inquiry, often one Zeugenaufruf, even if several Orte are listed (several vehicles/owners alone ≠ multiple incidents).
→ Set "event_classification": "S" and emit exactly one event_text = full release verbatim. Stop.

# Step 2 — Aggregate, not splittable crime narrative, do NOT split → "A"
Code "A" (exactly one event_text = full release verbatim) if ANY of the following holds:
- Bilanz / counts only — no individual who–what–where–when; do not split by offense or number.
- One modus or one warning theme — same scam pattern or one Polizei-Warnung with illustrative examples of the same broad type (e.g. phone fraud, Enkeltrick), no Step 1 linkage.
- Planned operations only — Messstellen, geplante Kontrollen; not one event per Ort.
- Storm / Unwetter round-up — no separate crime stories per location.
Do not use "A" for clear single-crime stories or for clear multi-incident bulletins.
→ Set "event_classification": "A" and emit exactly one event_text = full release verbatim. Stop.

# Step 3 — Multiple distinct incidents, DO split → "M"
Only reach this step if Step 1 and Step 2 do not apply.
Code "M" (one event_text per distinct incident, each a contiguous verbatim substring) if ANY of the following holds:
- Bulletin: several narrated crimes with separable who–what–where–when blocks (e.g. weekend/district PM, semicolon title, different Orte) with different victim/perpetrator constellations and no shared investigation, no Step 1 linkage.
- Unrelated incidents in one release (e.g. Verkehrsunfall + Einbruch).
- Festival/event: separable narrated crimes, different people/places (not only aggregate counts).
→ Set "event_classification": "M" and emit one event_text per distinct item. Stop.

# Step 4 — Default, do NOT split → "F"
Only apply Step 4 if Step 1, Step 2, and Step 3 do not apply.
Code "F" (exactly one event_text = full release verbatim) if none of the above clearly applies.
→ Set "event_classification": "F" and emit exactly one event_text = full release verbatim. Stop.

# Boilerplate
Opening station/date line → first event only. Trailing Impressum/contact → last event or omit; never its own event.

# Verbatim
event_text = contiguous, character-for-character copy. No paraphrase, summary, edits, translation, or "...".
Concatenated events = source order (trailing boilerplate optional). Want to skip text mid-block → split.

# Output Format
Return ONLY a valid JSON object. No explanations, no markdown formatting. event_classification: "S" | "A" | "M" | "F"
events: [{event_n, event_text}, …] — exactly 1 for S/A/F; ≥2 for M

Example:
{
"event_classification": "M",
"events": [ {"event_n": 1, "event_text": "<verbatim substring 1>"}, {"event_n": 2, "event_text": "<verbatim substring 2>"} ]
}

Appendix Prompt 1 — Filter — PKS / PMK relevance

# System Prompt
You are a Research Assistant for NLP classifying German police press-release events. Decide whether one event is relevant to PKS-Inland and/or PMK and return only valid JSON.

# Definitions
pks_relevant (0/1): 1 if the event describes at least one Straftat that would be counted in PKS-Inland under BKA PKS-Richtlinien. Exclude Verkehr-only, Staatsschutz-only, Ausland-only, Länder-Nebenstrafrecht/OWi-only, and non-crime content.

pmk_relevant (0/1): 1 if the event describes at least one Straftat that belongs in the PMK / political crime coding track: Staatsschutzdelikte and/or general criminal offenses with indications of political, extremist, or hate-crime relevance based on the circumstances of the act or the perpetrator’s attitude.

The two flags are independent. Both may be 0, one may be 1, or both may be 1.

# General Rules
Use only information explicitly stated in the event text. Attempts count. Antragsdelikte count even if no Strafantrag is mentioned. If genuinely ambiguous, prefer 0.
Code both flags as 0 if the event contains no narrated Straftat, including:
- missing persons, body found without foul play.
- Not PKS if fire/Brand with no criminal offense stated (accident, unknown cause only).
- demo logistics only.

# Coding Rules

# Code pks_relevant = 1 if
The event describes at least one PKS-Inland catalog offense, such as:
- violence, robbery, bodily injury, threats, homicide, sexual offenses.
- theft, burglary, pickpocketing, shoplifting.
- arson (incl. fahrlässige Brandstiftung when stated as Straftat); not accidental/unknown-cause fire; intentional property damage/graffiti (not Unfall damage).
- BtMG possession/trade/import/smuggling, but not drug impairment behind the wheel alone.
- fraud, cyber/economic crime, extortion, forgery.
- weapons, human trafficking, stalking, coercion, insult, house trespass, environmental and consumer-protection offenses.
- immigration-law offenses when the offense itself is described.
- PKS traffic exceptions: §315 StGB, §315b StGB, §22a StVG.

# Code pks_relevant = 0 if the event is only:
- Verkehrsdelikt: traffic accident, Unfallflucht/Fahrerflucht, drunk/drugged driving, driving without license, speed controls, insurance/tax traffic offenses.
- Staatsschutzdelikt without a separate PKS-Inland catalog offense.
- all Tathandlungen abroad with no German Handlungsort or Inland element.
- Länder-Nebenstrafrecht/OWi-only with no PKS catalog offense.
- non-crime content as listed above.
If excluded content and a PKS-Inland offense are both described, code pks_relevant = 1.

# Code pmk_relevant = 1 if
The event describes a Straftat that is PMK-relevant under the BKA definition. This applies when, considering the circumstances of the act and/or the perpetrator’s attitude, there are indications that the offense:
- aims to influence democratic will formation, political goals, or political decisions;
- is directed against the free democratic basic order, state security, or constitutional organs.
- endangers German foreign affairs through violence or preparatory acts.
- targets a person, group, institution, object, or any connected target because of actual or attributed political attitude/engagement, nationality, ethnicity, skin color, religion/worldview, social status, disability, gender/gender identity, sexual orientation, or appearance.

The affected person’s perspective may be considered if reported in the text.
Also code pmk_relevant = 1 for Staatsschutzdelikte even if political motivation is not established in the individual case, including: §§ 80a–83, 84–86a, 87–91, 94–100a, 102, 104, 105–108e, 109–109h, 129a, 129b, 130, 192a, 234a, 241a StGB, and VStGB.

# Code pmk_relevant = 0 if
no Straftat is described, or if the text gives no indication that the Straftat meets the PMK definition.

# Output Format
Return ONLY a valid JSON object. No explanations, no markdown formatting. Example:
{
"pks_relevant": 1,
"pmk_relevant": 0
}

Appendix Prompt 2 — Metadata

# System Prompt
You are a specialized Research Assistant for Natural Language Processing trained in classifying crime-related reports. Your task is to extract Procedural case-status variables as structured JSON from German police press releases (Pressemitteilungen).

# General Rules
- Use only information explicitly stated in the event text.
- Do not infer facts from names, stereotypes, or context not explicitly written.
- If information is missing or cannot be mapped confidently, return 0.
- Return ONLY valid JSON. No markdown, no commentary.

# Variables
- followup_report (0/1): 1 if the release explicitly references a prior report or states it is an update to a previously reported case (e.g., "Nachtrag", "wie bereits berichtet", "Aktualisierung"). A bare mention of an earlier incident, without signaling that this is a follow-up to a prior report, stays 0.
- arrest_made (0/1): 1 if the release explicitly states that at least one suspect was arrested or detained (e.g., "Festnahme", "vorläufige Festnahme", "in Gewahrsam genommen", "Verhaftung", "Überstellung", "Haftbefehl vollstreckt"). Else 0.
- witness_appeal (0/1): 1 if a witness call is present (e.g., "Zeugenaufruf", "Zeugen gesucht", "Hinweise erbittet …", "Wer … gesehen hat?"). Else 0.

# Output Format
Return ONLY a valid JSON object. No explanations, no markdown formatting. Example:
{
"followup_report": 0,
"arrest_made": 1,
"witness_appeal": 0
}

Appendix Prompt 3 — Crime / offense

# System Prompt
You are a specialized Research Assistant for Natural Language Processing trained in classifying crime-related reports. Your task is to extract crime-characteristic variables as structured JSON from German police press releases (Pressemitteilungen) and, when indicated, map each case to definitions of the Polizeiliche Kriminalstatistik (PKS).

# General Rules
- Use only explicit text. Missing/unclear → null (strings) or 0 (binaries).
- Code 1 if ANY described offense qualifies, not only the main one.

# Variables
- violent_crime (0/1): 1 if any offense in PKS-Summenschlüssel 892000 (Gewaltkriminalität: Mord/Totschlag §§ 211, 212, 213, 216; schwere Sexualdelikte; Raub §§ 249–252, 255, 316a; gefährliche/schwere KV §§ 224, 226, 226a, 231; KV mit Todesfolge §§ 227, 231; Entführung/Geiselnahme §§ 239a, 239b; Angriff Luft-/Seeverkehr § 316c). Else 0. NOT included: § 221 (Aussetzung), § 222 (fahrlässige Tötung), § 223 (einfache Körperverletzung), § 225 (Misshandlung Schutzbefohlener), § 229 (fahrlässige KV). violent_crime = 0 when the only Körperverletzung present is § 223 (i.e. assault_type = "simple_assault"), and 0 for purely negligent offenses.
- assault_type (string or null): PKS Straftatenschlüssel for Körperverletzung in this event. Code highest applicable tier.
  - null: use only when assault/KV is indicated but tier cannot be mapped from explicit wording.
  - "no_assault": Use when no Körperverletzung offense is described.
  - "simple_assault": §223 StGB (minor/simple assault). PKS Straftatenschlüssel 224000.
  - "dangerous_or_serious_assault": §§224, 226, 226a, 231 StGB (serious/aggravated assault ). PKS Straftatenschlüssel 222000. Including administration of poison, joint attacks by 2+ individuals, use of weapon/dangerous instrument, application of life-threatening treatment (e.g., severe choking, blows, or kicks to the head).
  - "assault_resulting_in_death": §§227, 231 StGB (assault resulting in death) PKS Straftatenschlüssel 221000.
- sexual_violence (0/1): PKS 111000 (Vergewaltigung, sexueller Übergriff §§177–178). Else 0.
- sexual_harassment (0/1): PKS 114000 (sexuelle Belästigung §184i). Else 0.
- immigration_offense (0/1): PKS 725000 (Aufenthalts-/Asyl-/Freizügigkeitsrecht). NOT 1 from foreign/asylum suspect description alone. Else 0.
- knife_attacks (0/1): 1 if knife used, attempted, or threatened against a person. NOT 1 for possession only or property-only use. Else 0.
- crime_type_open (string or null): concise German label for primary offense when a Straftat is described, but all binaries=0 and assault_type is null/"no_assault". Join multiple with " | ". null if no offense or any structured field applies.

# Output Format
Return ONLY a valid JSON object. No explanations, no markdown formatting. Example:
{
"violent_crime": 1,
"assault_type": "assault_resulting_in_death",
"sexual_violence": 0,
"sexual_harassment": 0,
"immigration_offense": 0,
"knife_attacks": 1,
"crime_type_open": null
}

Appendix Prompt 4 — Suspect

# System Prompt
You are a Research Assistant for NLP, extracting SUSPECT characteristics from German police press releases as structured JSON. Return ONLY a valid JSON object — no markdown, no commentary.

# Definition
A SUSPECT is a person whom the police treat as having committed, attempted, or being investigated for the offense: Tatverdächtige/r, Beschuldigte/r, Täter, Festgenommene/r, Angreifer, Räuber, Dieb, Einbrecher, flüchtige/r Person, "ein Unbekannter raubte".

NOT suspects (do not attach their attributes to suspect fields): VICTIMS (Geschädigte/r, Opfer, wurde verletzt/bestohlen/überfallen), witnesses (Zeugen, Hinweisgeber, Passanten), helpers/Verfolger, police officers on duty.

# Attribution
Only attach an attribute (gender, age, nationality, appearance, clothing, accent) to a SUSPECT field if the text attaches it to a person you identified as a suspect.
- "Die Räuber hatten eine dunkle Hautfarbe" → suspect ethnic cue.
- "Die 75-jährige Geschädigte hatte eine dunkle Hautfarbe" → NOT a suspect cue.

# General Rules
- Use only what the text says. Return null when missing.
- Nationality fields use ONLY explicit citizenship statements. Place-of-residence labels ("Berliner", "Mainzerin", "Bayer") are NOT a nationality.
- Ethnic-cue fields capture subtle police-given markers (skin/hair/eye color, accent, clothing, fluency, religious dress).
- Gender coding:
  - Sex nouns: always count, in singular or plural: Mann, Frau, Junge, Mädchen, Herr, Dame (and clear compounds such as junger Mann, ältere Dame). Examples: "eine 75-jährige Frau" → female; "zwei Männer" → male. These set gender and imply suspect_no_information = 0. Do not confuse them with gender-invariant role nouns (Person, Mensch, Kind).
  - Gender-contrastive role nouns: nouns with a feminine counterpart in normal police usage (Tatverdächtige/r, Täter/in, Beschuldigte/r, Angreifer/in, Räuber/in, Dieb/Diebin, Festgenommene/r, Flüchtige/r, Unbekannte/r, …) establish gender in the SINGULAR when the text treats the perpetrator as a specific natural person who acted or was dealt with (committed/attempted the offense, fled, was observed, stopped, arrested, or could make statements): masculine form → male (Example: "Ein Unbekannter bedrohte die Kassiererin und flüchtete" → male, suspect_no_information = 0), feminine / -in form → female. This NEVER applies: to a bare placeholder for an unidentified perpetrator with no person narrative ("der Täter konnte noch nicht ermittelt werden", "die Täterschaft ist ungeklärt" → no gender); where the actor may be a firm, group label, or abstract Täterschaft without a natural person (→ no gender; suspect_no_information = 1 if no natural person is described); or in the plural (see below).
  - Generic masculine plurals (Täter, Tatverdächtige, Unbekannte, Beschuldigte, Personen, Jugendliche) → never gender. Explicitly sexed plurals (zwei Männer, drei Frauen, zwei Mädchen) → do. Formulaic inclusive officialese ("Täterinnen und Täter", "Beamtinnen und Beamten") is not information about actual suspects. Do not treat generic plurals or institution-/Täterschaft-only mentions as "unspecified-gender suspects" for partial_male/partial_female.
  - Gender-invariant nouns carry NO gender regardless of grammatical gender: die Person, der Mensch, das Kind. Pronouns following a noun's grammatical gender add nothing; a pronoun breaking it toward natural gender does count ("Die Person … Er flüchtete zu Fuß" → male).
- First code suspect_no_information. If 1, set all other suspect fields to null (suspect_gender, suspect_nationality_cue, suspect_ethnic_cue, suspect_nationality_keywords, suspect_ethnic_keywords, suspect_nationality_iso).

# Variables
- suspect_no_information (0/1): 1 if the police give NO leads at all about any suspect — no arrest, no identification, and no description whatsoever of the suspect's person (e.g., "unbekannte Täter" with no further details; or an offense with no described actor at all). Mere mention of the modus operandi ("hebelten ein Fenster auf", "riefen an") is NOT a description of the suspect's person and still counts as no information. 0 only if at least one suspect was arrested, identified ("polizeibekannt", "amtsbekannt", named, age given), or described personally in any way (gender, age, height, build, clothing, occupation, accent, skin/hair/eye color, language). "Unbekannter Mann"/"unbekannte Frau" count as gender descriptions. Escape details (Fluchtrichtung, Fluchtfahrzeug), and modus operandi are NOT descriptions of the suspect’s person and do not by themselves set suspect_no_information = 0.
- suspect_gender (string or null): use EXACTLY one of:
  - "all_male" / "all_female": every gender-specified suspect is male / female AND no described suspect has unspecified gender. Covers single-suspect cases like "ein 30-jähriger Mann" → "all_male".
  - "mixed": at least one explicit male AND one explicit female suspect.
  - "partial_male" / "partial_female": at least one explicit male (female) suspect AND at least one further described suspect with unspecified gender, none of the other gender.
  - null: gender not stated for any suspect (generic plurals like "Jugendliche", "Personen", "Täter" → null).
- suspect_nationality_cue (string or null): explicit citizenship/nationality statements about a suspect only:
  - "german_explicit": explicitly described as German nationality (e.g., "deutscher Staatsbürger", clear use of "deutsch"/"Deutscher" as nationality).
  - "foreign_explicit": explicitly described as non-German nationality (e.g., "rumänischer Staatsbürger", "ausländischer Staatsangehöriger", "nichtdeutscher"). Clear demonyms tied to suspects as origin/citizenship ("Pole", "Polen", "Italiener").
  - "dual_or_mixed": explicit dual citizenship or mixed explicit nationality statements.
  - null: nationality not described for any suspect.

- suspect_ethnic_cue (string or null): ethnicized appearance/origin/language cues about a suspect (short of explicit nationality). If both German and foreign markers describe suspects, code "ethnicized_descriptor_foreign":
  - "ethnicized_descriptor_german" — "Hochdeutsch", "akzentfrei", "akzentfrei deutsch", "deutsches Erscheinungsbild", "süddeutscher/bayrischer Akzent", "blond", "blaue Augen", "weiße/helle Hautfarbe", "hellhäutig", "kaukasisches/europäisches Aussehen".
  - "ethnicized_descriptor_foreign" — "südländisches Erscheinungsbild / Südländer / südländischer Typ", "osteuropäisches Erscheinungsbild", "arabisches Aussehen", "afrikanischer Herkunft", "dunkle Hautfarbe / dunkler Teint", "gebrochenes Deutsch", "ausländischer / unbekannter / fremdländischer Akzent", "Kopftuch", traditional non-German dress.
  - null — none.
- suspect_nationality_keywords (string or null): Exact German substring(s) from the text supporting suspect_nationality_cue. Shortest contiguous span(s); collapse internal whitespace to single spaces; do not translate. Multiple spans joined by " | " in order of appearance. null if none.
- suspect_ethnic_keywords (string or null): Exact German substring(s) supporting suspect_ethnic_cue. Same span rules. null if none.
- suspect_nationality_iso (string or null): ISO 3166-1 alpha-2 code(s) for a suspect when the text gives a specific country or clear demonym (e.g., "Bosnier" → BA, "polnischer Staatsangehöriger" → PL, "Algerier" → DZ). Use "DE" only when German citizenship is explicit, NOT for "deutsch" as language or for city-of-residence labels. If several suspects share a single nationality, use that code once (not repeated). Multiple distinct nationalities joined by " | " matching the order of suspect_nationality_keywords. null when vague (e.g., "ausländisch" without a country).

# Output Format
Return ONLY a valid JSON object. No explanations, no markdown formatting. Example:
{
"suspect_no_information": 0,
"suspect_gender": "all_male",
"suspect_nationality_cue": "foreign_explicit",
"suspect_ethnic_cue": "ethnicized_descriptor_foreign",
"suspect_nationality_keywords": "Italiener",
"suspect_ethnic_keywords": "südländischer Typ",
"suspect_nationality_iso": "IT"
}

Appendix Prompt 5 — Victim

# System Prompt
You are a Research Assistant for NLP, extracting VICTIM characteristics from German police press releases as structured JSON. Return ONLY a valid JSON object — no markdown, no commentary.

# Definition
A VICTIM is a person against whom the offense was committed — who suffered injury, loss, theft, threat, or had property taken: Geschädigte/r, Opfer, "wurde verletzt / bestohlen / überfallen / angegriffen / ausgeraubt / bedroht", "ins Krankenhaus eingeliefert".

NOT victims (do not attach their attributes to victim fields): SUSPECTS (Tatverdächtige, Täter, Beschuldigte, Räuber, Dieb, Angreifer, Festgenommene, "ein Unbekannter raubte/forderte"), witnesses (Zeugen, Hinweisgeber, Passanten — unless the offense target), helpers/Verfolger. Police officers are victims ONLY if the text says one was injured/attacked/threatened as a target — then victim_police_officer = 1.

# Attribution
Only attach an attribute (gender, age, nationality, appearance, clothing, accent) to a VICTIM field if the text attaches it to a person you identified as a victim.

- "Die Täter hatten eine dunkle Hautfarbe" → NOT a victim cue.
- "Der Räuber hatte einen blonden Bart" → NOT a victim cue.
- "Ein 30-jähriger polnischer Staatsangehöriger wurde festgenommen" with no other person → victim_no_information = 1 (the polish person is the suspect).

# General Rules
- Use only what the text says. Return null when missing.
- Nationality fields use ONLY explicit citizenship statements. Place-of-residence labels ("Berliner", "Mainzerin", "Bayer") are NOT a nationality.
- Ethnic-cue fields capture subtle police-given markers (skin/hair/eye color, accent, clothing, fluency, religious dress).
- Gender coding:
  - Sex nouns: always count, in singular or plural: Mann, Frau, Junge, Mädchen, Herr, Dame (and clear compounds such as junger Mann, ältere Dame). Examples: "eine 75-jährige Frau" → female; "zwei Männer" → male. These set gender and imply victim_no_information = 0. Do not confuse them with gender-invariant role nouns (Opfer, Person, Kind).
  - Gender-contrastive role nouns: nouns with a feminine counterpart in normal police usage (Geschädigte/r, Eigentümer/in, Inhaber/in, Halter/in, Bewohner/in, Mieter/in, Fahrer/in, Fahrzeugbesitzer/in, Firmeninhaber/in, Geschäftsführer/in, …) establish gender in the SINGULAR when the text treats the harmed party as a specific known natural person (reported or discovered the offense, was injured or treated, was contacted by police): masculine form → male (Example: "Der Eigentümer stellte den Diebstahl fest und informierte die Polizei" → male, victim_no_information = 0), feminine / -in form → female. This NEVER applies: to unknown or not-yet-identified persons ("der Eigentümer konnte noch nicht ermittelt werden" → no gender); where the owner/holder may be a firm or institution (business premises, company vehicles, public infrastructure → no gender; victim_no_information = 1 if no natural person is described); or in the plural (see below).
  - Generic masculine plurals (Geschädigte, Opfer, Bewohner, Personen, Senioren) → never gender. Explicitly sexed plurals (zwei Männer, drei Frauen, zwei Mädchen) → do. Formulaic inclusive officialese ("Seniorinnen und Senioren", "Beamtinnen und Beamten") is not information about actual victims. Do not treat generic plurals or institution-only mentions as "unspecified-gender victims" for partial_male/partial_female.
  - Gender-invariant nouns carry NO gender regardless of grammatical gender: das Opfer, die Person, der Mensch, die Geisel, das Kind, der Fahrgast. Pronouns following a noun's grammatical gender add nothing; a pronoun breaking it toward natural gender does count ("Das Opfer … Er wurde ins Krankenhaus gebracht" → male).
- First code victim_no_information. If 1, set all of these to null: victim_gender, victim_nationality_cue, victim_ethnic_cue, victim_nationality_keywords, victim_ethnic_keywords, victim_nationality_iso. Always still evaluate victim_police_officer independently.

# Variables
- victim_no_information (0/1): 1 if the text gives NO leads at all about any victim — no identification and no description whatsoever of the victim’s person. This covers both (i) no natural person is narrated as harmed at all (institution/firm only, "Sachschaden entstand" with no person, unoccupied-house burglary, drug-possession arrest, prevention warning) and (ii) a victim is referenced but given no personal descriptor ("das Opfer erstattete Anzeige"). Mere mention that someone was harmed is NOT a description of the victim’s person. 0 only if a victim is identified, in medical treatment ("in Behandlung", "ins Krankenhaus eingeliefert"), or any personal descriptor of a victim is given (gender, age, height, build, clothing, occupation, etc.). Do NOT set this to 0 based on suspect-only descriptions.
- victim_police_officer (0/1): 1 only if the text narrates at least one on-duty police officer as a victim of the offense — injured, attacked, or threatened as the target (e.g. "Polizist wurde verletzt", "Angriff auf Beamte", blows/threats directed at officers). 0 if police appear only as responders, controllers, or arresting officers — including routine Festnahme with "Widerstand gegen Vollstreckungsbeamte" when no officer is described as injured/attacked/threatened. 0 if police appear only as responders, controllers, investigators, or arresting officers and no force or threat is directed at them. Passive resistance alone (sich sperren, sich festhalten, Wegziehen des Arms; "Widerstand gegen Vollstreckungsbeamte" with no force described against officers) → 0.
- victim_gender (string or null): use EXACTLY one of:
  - "all_male" / "all_female": every gender-specified victim is male/female AND no described victim has unspecified gender. Covers single-victim cases like "Eine 75-jährige wurde überfallen" → "all_female".
  - "mixed": at least one explicit male AND one explicit female victim.
  - "partial_male" / "partial_female": at least one explicit male (female) victim AND at least one further described victim with unspecified gender, none of the other gender.
  - null: gender not stated for any victim.
- victim_nationality_cue (string or null): explicit citizenship/nationality statements about a victim only:
  - "german_explicit": explicitly described as German nationality (e.g., "deutscher Staatsbürger", clear use of "deutsch"/"Deutscher" as nationality).
  - "foreign_explicit": explicitly described as non-German nationality (e.g., "rumänischer Staatsbürger", "ausländischer Staatsangehöriger", "nichtdeutscher"). Clear demonyms tied to victims as origin/citizenship ("Pole", "Polen", "Italiener").
  - "dual_or_mixed": explicit dual citizenship or mixed explicit nationality statements.
  - null: nationality not described for any victim.
- victim_ethnic_cue (string or null): ethnicized appearance/origin/language cues about a victim (short of explicit nationality). If both German and foreign markers describe victims, code "ethnicized_descriptor_foreign":
  - "ethnicized_descriptor_german": "Hochdeutsch", "akzentfrei", "akzentfrei deutsch", "deutsches Erscheinungsbild", "süddeutscher/bayrischer Akzent", "blond", "blaue Augen", "weiße/helle Hautfarbe", "hellhäutig", "kaukasisches/europäisches Aussehen".
  - "ethnicized_descriptor_foreign": "südländisches Erscheinungsbild / Südländer / südländischer Typ", "osteuropäisches Erscheinungsbild", "arabisches Aussehen", "afrikanischer Herkunft", "dunkle Hautfarbe / dunkler Teint", "gebrochenes Deutsch", "ausländischer / unbekannter / fremdländischer Akzent", "Kopftuch", traditional non-German dress.
  - null: none.
- victim_nationality_keywords (string or null): Exact German substring(s) from the text supporting victim_nationality_cue. Shortest contiguous span(s); collapse internal whitespace to single spaces; do not translate. Multiple spans joined by " | " in order of appearance. null if none.
- victim_ethnic_keywords (string or null): Exact German substring(s) supporting victim_ethnic_cue. Same span rules. null if none.
- victim_nationality_iso (string or null): ISO 3166-1 alpha-2 code(s) for a victim when the text gives a specific country or clear demonym (e.g., "Bosnier" → BA, "Italienerin" → IT). Use "DE" only when German citizenship is explicit, NOT for "deutsch" as language or for city-of-residence labels. If several victims share a single nationality, use that code once (not repeated). Multiple distinct nationalities joined by " | " matching the order of victim_nationality_keywords. null when vague (e.g., "ausländisch" without a country).

# Output Format
Return ONLY a valid JSON object. No explanations, no markdown formatting. Example:
{
"victim_no_information": 0,
"victim_police_officer": 0,
"victim_gender": "all_female",
"victim_nationality_cue": "german_explicit",
"victim_ethnic_cue": null,
"victim_nationality_keywords": "deutsche Staatsbürgerin",
"victim_ethnic_keywords": null,
"victim_nationality_iso": "DE"
}

Appendix Prompt 6 — Constellation

# System Prompt

You are a Research Assistant for NLP classifying German police press releases (Pressemitteilungen). Code ONE binary flag: whether the suspect–victim constellation of the event is unclear — i.e., the text does not allow a clean one-directional assignment of offender(s) on one side and victim(s) on the other. Return ONLY a valid JSON object — no markdown, no commentary.

# Variables
constellation_unclear (0/1):
- Code 1 if ANY of the following holds:
  - Mutual offenses: both parties act as aggressors against each other ("gegenseitige/wechselseitige Körperverletzung", "Anzeigen gegeneinander", "Ermittlungen gegen beide"), or the same person is treated as both Tatverdächtige/r and Geschädigte/r.
  - Symmetric fight wording, no designated aggressor: "gerieten aneinander", "kam es zu Handgreiflichkeiten / einem Gerangel / einer Schlägerei" with no one side identified as attacker — code 1 even if only one party is injured or some Beteiligte fled unidentified.
  - Roles explicitly open: the text states that roles, sequence of attack, or self-defense are undetermined ("wer die Auseinandersetzung begann, ist unklar", "welche Rolle die Beteiligten spielten, ist Gegenstand der Ermittlungen", "ob Notwehr vorlag, wird geprüft", widersprüchliche Angaben beider Parteien).

Reference example → 1: "Am Dienstagmittag kam es in der Hauptstraße zu einer handfesten Auseinandersetzung zwischen zwei Bewohnerinnen eines Mehrfamilienhauses. Die ersten Ermittlungen ergaben, dass eine Frau im Begriff war, die Motorhaube des geparkten Pkw ihrer Nachbarin zu zerkratzen. Dies sah die Frau und eilte zu ihrem Pkw und zog die Aggressorin weg. Hierbei kam es dann zu gegenseitigen handfesten Schlägen, wodurch beide Frauen verletzt wurden." — "gegenseitige Schläge", both injured: each woman is simultaneously aggressor and harmed party.

- Code 0 when the text attributes the offense to one side, even if:
  - "Auseinandersetzung"/"Streit" is only the opener and one aggressor is then clearly identified ("schlug unvermittelt zu", Ermittlungen gegen nur eine Person);
  - the suspect is unknown or unidentified (this does not apply to fights among Beteiligte);
  - a victim/witness merely defends, restrains, or pursues the perpetrator — unless the text signals mutual offenses or Ermittlungen against the defender;
  - both parties are injured without mutual offending (accident, flight, police use of force);
  - only motive or lead-up is unclear ("Hintergründe unklar", "wie es zum Streit kam, ist unklar") while the offense is clearly attributed;
  - a suspect resists arrest or is injured during the Einsatz.

Silence about who started never decides on its own: mutual or symmetric fight wording codes 1; a clearly one-sided attack codes 0, even if the lead-up is unnarrated. If in doubt, code 0.

# Output Format
Return ONLY a valid JSON object. No explanations, no markdown formatting. Example:
{
"constellation_unclear": 0
}

Appendix Prompt 7 — Political / hate crime

# System Prompt
You extract political-motivation variables as JSON from German police press releases (Pressemitteilungen), mapping each case to the Definitionssystem Politisch Motivierte Kriminalität (PMK).

# General Rules
use only explicitly stated information; do not infer from names or stereotypes; do not infer hate motivation from the victim's identity alone; code whether at least one qualifying offense applies (not only the main one); if unclear, use 0 or null; return ONLY valid JSON (no markdown, no commentary).

# Variables

- hate_crime (0/1): 1 if at least one offense falls under PMK "Hasskriminalität" — i.e., the circumstances of the act and/or the perpetrator's mindset indicate it was committed because of the perpetrator's prejudice regarding nationality, ethnicity, skin color, religious affiliation/worldview, social status, physical/mental disability, gender/gender identity, sexual orientation, or physical appearance. The target may be a person or group, an institution, or an object the perpetrator associates with such a group (actual or attributed affiliation). Else 0.
- hate_crime_type (string or null): if hate_crime=1, a short open label for the prejudice/target (e.g. "antisemitic", "racist/xenophobic", "anti-Muslim", "anti-Christian", "homophobic", "transphobic", "misogynistic", "anti-disability", "anti-homeless"). If multiple targets, join with " | ". Otherwise null.
- pmk (string or null): the political orientation
  - "right_wing_orientation": core idea is the inequality/unequal value of people (e.g. ethnic nationalism, racism, social Darwinism, National Socialism).
  - "left_wing_orientation": core idea is the equality of all people (e.g. anarchism, communism/revolutionary Marxism; rejection of state, societal and capitalist structures).
  - "other_orientation": a religious or foreign ideology was decisive and was exploited to justify the act.
  - null: no political orientation specified; political orientation can not be determined.

# Output Format
Return ONLY a valid JSON object. No explanations, no markdown formatting. Example:
{
"hate_crime":1,
"hate_crime_type": "antisemitic",
"pmk": "right_wing_orientation"
}

From incident to press release

Only a tiny share of recorded crime gets a press release. Press offices ~6–8 staff; every release is written by hand.

Why not a demand-side story?

  • About 75% of releases are published on the day of the event or the day after — too fast for newsrooms to have already shaped what the police write
  • Local media’s structural constraints amplify this supply-side power: lacking investigative resources, many outlets publish police press releases verbatim, often through direct feeds

Appendix — News media rely on police

~75% of crime articles are police-sourced or republish a release; only ~2.1% rely primarily on the outlet’s own reporting (Media Cloud, 2014–2025; N = 8,350).

Appendix Table B.1 — Coded variables in the analysis dataset

Appendix Table C.1 — State-years, cues, and quantities in the descriptive figures

Appendix Table D.1 — State-years included in the PKS comparison, 2014–2025

Appendix Figure D.1 — Press-release coverage by state and month, 2014–2025

Appendix Table D.2 — Pooled comparisons with and without the coverage restriction

Appendix Table D.3 — Alternative coverage restrictions

Appendix Table E.1 — Offense categories and their PKS benchmarks

Appendix Figure F.1 — Events in the analysis dataset by publication year and state

Appendix Table F.1 — From the input corpus to the analysis dataset

Appendix Table F.2 — Descriptive statistics for the coded variables

Appendix Table G.1 — Frozen inference configuration

Appendix Table G.3 — Performance metrics, main model

Appendix Table G.4 — Agreement between the pipeline and refcrime

Appendix Figure G.1 — Share of events answered at each stage, by routing category

Appendix Figure G.2 — Share of events answered at each stage, by routing category and worker

Appendix Figure G.3 — PMK-relevant events and answers at the political stage, by worker

Appendix Figure G.4 — Return times of answers by prompt and worker

Appendix Figure G.5 — Timeline of the corpus run by worker

Appendix Figure G.6 — Answer length by stage and worker

Appendix Figure G.7 — Segmentation and relevance-filter decisions by worker

Appendix Figure G.8 — Working time per worker

Appendix Figure G.9 — Share of answers that could be read, by stage and submission-order quartile

Appendix Figure G.10 — Agreement between two runs of the same 5,000 releases on the cluster

Appendix Figure H.1 — Representation ratios in police communication, by gender of suspects and victims

Appendix Figure H.4 — Nationalities and ethno-racial descriptors in events with suspect information, by case status

Appendix Figure H.5 — Origin cues over time

Appendix Figure H.6 — Out-group cues in police press communication over time

Appendix Figure I.1 — Unattributed republication

Appendix Table I.1 — Outlets and article coverage

Appendix Figure J.2 — Placebo distribution of right-bloc estimates

Appendix Table J.1 — Main results, estimated jointly for both marker groups

Appendix Table J.2 — One randomly selected publication window per respondent

Appendix Table J.3 — Main results, without demographic controls

Appendix Table J.4 — Alternative fixed effects

Appendix Figure J.3 — Covariate balance

Appendix Figure J.4 — Right-bloc estimates by interview window

Appendix Table J.5 — Effects on individual parties

Appendix Table J.6 — Heterogeneity by respondent characteristics

Appendix Figure K.2 — MV event-study vs placebo states

Potential mechanism: immigration salience

When immigration is politically salient, press offices increase out-group disclosure to signal transparency.

Police interview

“So I was very involved in the so-called refugee issue, I believe it was around 2019, when there were also many incidents. During that period, we communicated such incidents involving asylum seekers with maximum transparency because we did not want accusations or criticism from the right-wing spectrum claiming we were hiding something…”

Related working paper

Elshehawy, Frey, Haas, Riaz & Roemer — osf.io/trhys_v1

Interview Quote 1

“So I was very involved in the so-called refugee issue, I believe it was around 2019, when there were also many incidents. During that period, we communicated such incidents involving asylum seekers with maximum transparency because we did not want accusations or criticism from the right-wing spectrum claiming we were hiding something or allowing a narrative to emerge that we remain silent when a particular group of people, who are central to the discussion here, commit something like shoplifting.”

Interview Quote 2

“…when we currently deal with people of Russian or Ukrainian descent, we aim to be transparent about this as well, because it is now a topic that concerns the public and people in general. We are thus more sensitive in these cases, whereas perhaps five years ago we wouldn’t have even considered whether we should specifically address conflicts here between Russians and Ukrainians.”