{risAT}: Climate change in asylum-related decisions of the Austrian Federal Administrative Court (BVwG)

Austria
risAT
asylum
climate

Using {risAT} to search Austrian Federal Administrative Court (BVwG) asylum decisions for references to climate change (Klimawandel).

Author

Roland Schmidt

Published

6 Aug 2026

Modified

6 Aug 2026

Just the results, please

Annual BVwG decision texts returned for the AsylG norm filter, split by Klimawandel matches

Annual BVwG decision texts returned for the AsylG norm filter, split by Klimawandel matches

Annual share of Klimawandel matches among BVwG decision texts returned for the AsylG norm filter

Annual share of Klimawandel matches among BVwG decision texts returned for the AsylG norm filter

1 Context

A few years ago, I had the privilege of contributing to a paper on the relevance of climate-change-related consequences—such as floods, droughts, and famines—to the Austrian Federal Administrative Court’s case law on subsidiary protection and asylum.1 The study was part of a research project on climate-change-related migration and whether, or to what extent, a legal concept of the “climate refugee” is emerging. My task was modest: to retrieve the full body of relevant case law, scan it for certain key terms, extract the relevant sections, and do some number crunching. The resulting dataset then served as the basis for case studies conducted by legal scholars.

1 Monika Mayrhofer and Margit Ammer, “Climate mobility to Europe: The case of disaster displacement in Austrian asylum procedures”, Frontiers in Climate 4 (2022): 990558.

I really enjoyed working on this project. In retrospect, however, my approach was somewhat clumsy, particularly given the tools available to us today, such as {httr2}. I suspect that this occasionally protracted process was one of my motivations for writing the {risAT} package, which I introduced in my previous blog post. After all, the beauty of an R package is that it allows you to encapsulate a complex workflow in an easy-to-use function and have it at your fingertips. Some progress, you might say.

Given the current heatwave in Austria and across Europe, I thought this might be a good opportunity to revisit the topic and demonstrate some of {risAT}’s features—albeit without the same level of detail or legal expertise, given time constraints and other priorities.

The questions I came up with are:

  1. How often does the term Klimawandel appear in the BVwG’s asylum-related decisions?
  2. How does the frequency of these references change over time?

Although this approach is admittedly crude and the results come with several caveats, as I explain later, it provides a useful demonstration of {risAT}. The analysis involves four steps:

  1. Query all BVwG decisions with a reference to AsylG in their Norm field.
  2. Query all BVwG decisions that mention Klimawandel in their text.
  3. Identify which decisions returned by the second query also appear in the first.
  4. Calculate the share of matching decisions for each year.

2 Get asylum decisions

To start with, I need all BVwG decisions which refer to the Austrian Asylum Act (AsylG) in their Norm field. These decisions form the denominator for the subsequent analysis. I retrieve them separately for each year from 2014 to 2025. This keeps the individual requests reasonably small, while {furrr} allows me to run several of them in parallel. Note that this can take quite a while. Note also that I set search_decision_text = TRUE and search_legal_principles = FALSE when specifying the query. I am interested only in the decision texts themselves, not the legal principles, which generally summarize the legal gist of a decision. Including both would produce duplicate records.

Fetch BVwG asylum-norm records year by year (parallel)
library(future)
library(furrr)
library(tictoc)

dir.create(data_path("bvwg_asyl"), showWarnings = FALSE)

plan(multisession, workers = 4)

tic()
future_walk(2014:2025, \(yr) {
  bvwg_asyl_year <- risAT::ris_search_bvwg(
    norm = "AsylG",
    decision_date_from = paste0(yr, "-01-01"),
    decision_date_to = paste0(yr, "-12-31"),
    search_decision_text = TRUE,
    search_legal_principles = FALSE,
    echo = TRUE
  )

  readr::write_rds(
    bvwg_asyl_year,
    data_path("bvwg_asyl", paste0("bvwg_asyl_", yr, ".rds")),
    compress = "gz"
  )
}, .progress = TRUE)
toc()

plan(sequential)

3 Search for climate change

In the next step, I search all BVwG decision texts from the same period for the term Klimawandel. {risAT} makes this straightforward: I simply supply the search term through the query argument. I also restrict the search to the same date range as above. The result is a list of all BVwG decisions which contain the term Klimawandel in their text.

Get BVwG records containing ‘Klimawandel’
bvwg_klimawandel_results <- ris_search_bvwg(
  query = "Klimawandel",
  decision_date_from = "2014-01-01",
  decision_date_to = "2025-12-31",
  search_decision_text = TRUE,
  search_legal_principles = FALSE,
  echo = TRUE
)

In the next chunk, I match both sets of data.

Classify AsylG decision texts by Klimawandel match
bvwg_asyl_norm_records <- bvwg_asyl_records %>%
  mutate(
    mentions_klimawandel = as.character(id) %in%
      as.character(bvwg_klimawandel_results$id)
  )

# The Klimawandel query covers all BVwG decisions; 3,003 also match AsylG.
stopifnot(sum(bvwg_asyl_norm_records$mentions_klimawandel) == 3003L)

bvwg_asyl_norm_climate_year <- bvwg_asyl_norm_records %>%
  count(year, mentions_klimawandel, name = "records") %>%
  complete(
    year = 2014:2025,
    mentions_klimawandel = c(FALSE, TRUE),
    fill = list(records = 0L)
  ) %>%
  mutate(
    climate_group = factor(
      if_else(
        mentions_klimawandel,
        "Matches Klimawandel search",
        "No Klimawandel search match"
      ),
      levels = c("No Klimawandel search match", "Matches Klimawandel search")
    )
  ) %>%
  mutate(
    total = sum(records),
    share = if_else(total > 0, records / total, 0),
    .by = year
  )

4 Results

Let’s first look at the absolute numbers. Figure 1 shows the annual number of distinct BVwG decision texts returned for norm = "AsylG". The highlighted part of each bar indicates how many of these decisions also contain the term Klimawandel.

Plot annual asylum-norm records by Klimawandel mention
bvwg_asyl_norm_totals <- bvwg_asyl_norm_climate_year %>%
  distinct(year, total)

bvwg_asyl_norm_climate_counts <- bvwg_asyl_norm_climate_year %>%
  filter(mentions_klimawandel) %>%
  select(year, records, total)

bvwg_asyl_norm_climate_year %>%
  ggplot(aes(x = year, y = records, fill = climate_group)) +
  geom_col(width = 0.72, key_glyph = draw_key_point) +
  geom_text(
    data = bvwg_asyl_norm_totals,
    aes(x = year, y = total, label = scales::comma(total)),
    inherit.aes = FALSE,
    vjust = -1.5,
    color = "black",
    size = gg_annot_size,
    family = gg_plot_family
  ) +
  geom_text(
    data = bvwg_asyl_norm_climate_counts,
    aes(x = year, y = total, label = paste0("(", records, ")")),
    inherit.aes = FALSE,
    vjust = -0.3,
    color = "#4D4D4D",
    size = gg_annot_size * 0.85,
    family = gg_plot_family
  ) +
  scale_x_continuous(breaks = c(2014, 2015, 2020, 2025)) +
  scale_y_continuous(labels = scales::comma, expand = expansion(mult = c(0, 0.2))) +
  scale_fill_manual(
    values = c(
      "No Klimawandel search match" = "#7f7f7f",
      "Matches Klimawandel search" = "#e69f00"
    ),
    name = NULL
  ) +
  labs(
    title = "How often does ‘Klimawandel’ appear in BVwG decisions referencing AsylG?",
    subtitle = paste0(
      "Annual distinct BVwG decision texts returned by RIS for norm = “AsylG”, 2014–2025; ",
      "highlighted texts also match the text search “Klimawandel”. A match indicates term occurrence ",
      "only—not legal relevance or use in the court’s reasoning. Labels show the annual total and matching subset."
    ),
    x = "Year",
    y = "RIS records",
    caption = ris_graph_caption
  ) +
  ris_plot_theme()
Figure 1: Annual BVwG decision texts returned for the AsylG norm filter, split by Klimawandel matches.
Stacked column chart of annual Austrian Federal Administrative Court decision texts returned by RIS with AsylG in the norm filter from 2014 to 2025. Highlighted segments also match Klimawandel in the decision text; labels give the annual AsylG total and matching subset. No decision texts match through 2017, and matches remain a minority thereafter.

What stands out to me is that there is not a single match before 2018. The term first appears in 2018 and is present in every year thereafter, although the numbers fluctuate quite substantially.

To make the comparison between years a bit easier, Figure 2 shows the same result as a share of all decisions returned for the AsylG filter. The share reaches 4.1 per cent in 2023, falls to 2.6 per cent in 2024, and then increases to 8.3 per cent in 2025. This is by far the highest value in the period covered here.

Plot the annual Klimawandel share among asylum-norm records
bvwg_asyl_norm_climate_year %>%
  filter(mentions_klimawandel) %>%
  ggplot(aes(x = year, y = share)) +
  geom_line(color = "#1185FE") +
  geom_point(color = "#1185FE") +
  geom_text(
    aes(label = scales::percent(share, accuracy = 0.1)),
    nudge_y = 0.006,
    color = "black",
    size = gg_annot_size,
    family = gg_plot_family
  ) +
  scale_x_continuous(breaks = c(2014, 2015, 2020, 2025)) +
  scale_y_continuous(
    labels = scales::percent_format(accuracy = 1),
    expand = expansion(mult = c(0.05, 0.12))
  ) +
  labs(
    title = "What share of BVwG decisions referencing AsylG mention ‘Klimawandel’?",
    subtitle = paste0(
      "Annual share of distinct BVwG decision texts returned by RIS for norm = “AsylG” ",
      "that also match the text search “Klimawandel”, 2014–2025. A match indicates term occurrence ",
      "only—not legal relevance or use in the court’s reasoning."
    ),
    x = "Year",
    y = NULL,
    caption = ris_graph_caption
  ) +
  ris_plot_theme()
Figure 2: Annual share of Klimawandel matches among BVwG decision texts returned for the AsylG norm filter.
Line chart of the annual share of Austrian Federal Administrative Court decision texts returned by RIS for the AsylG norm filter that also match Klimawandel from 2014 to 2025. The share is zero through 2017, fluctuates thereafter, reaches 4.1 per cent in 2023, falls to 2.6 per cent in 2024, and rises to 8.3 per cent in 2025.

There is, however, an important caveat. A match only tells us that the word Klimawandel appears somewhere in a decision returned for the AsylG filter. It does not tell us whether climate change was central to the case, whether it played a role in the court’s reasoning, or whether the decision ultimately turned on it. The graphs therefore show how often the term appears, not how often climate change was legally relevant.

Most of these matches are likely located in the country-of-origin information (COI) section, which forms part of the decision text and summarizes general conditions in an applicant’s country of origin. However, these results do not tell us whether a match also featured in the court’s reasoning. In other words, the growing number of climate-change mentions in asylum decisions does not, by itself, mean that climate change played an increasingly important role in decisions on asylum applications. Establishing that would require a robust method for identifying the section in which each match occurs and determining whether it forms part of the court’s reasoning.

5 Wrap-up

For now, I hope the example also demonstrates how {risAT} can be used to move from a legal norm to a searchable collection of decisions. As always, if you spot an error, have a question, or want to suggest a follow-up, feel free to contact me via direct message on Bluesky or the {risAT} GitHub discussion board.

Reuse

Citation

BibTeX citation:
@online{schmidt2026,
  author = {Schmidt, Roland},
  title = {\{risAT\}: {Climate} Change in Asylum-Related Decisions of
    the {Austrian} {Federal} {Administrative} {Court} {(BVwG)}},
  date = {2026-08-06},
  url = {https://werk.statt.codes/posts/2026-07-26-bvwg-asylum-climate/},
  langid = {en}
}
For attribution, please cite this work as:
Schmidt, Roland. 2026. “{risAT}: Climate Change in Asylum-Related Decisions of the Austrian Federal Administrative Court (BVwG).” August 6, 2026. https://werk.statt.codes/posts/2026-07-26-bvwg-asylum-climate/.