Arlanda Security Queues [UNOFFICIAL]

Show last

What is this?

Arlanda is the main international airport of Stockholm (and whole Sweden). During Spring 2022, post-Covid ramp-up of passenger traffic was hampered by staffing problems leading to extremely long waiting times through security control. This resulted in inbound traffic stops, widespread criticism and frustration as people hoping to travel abroad on their vacations were stalled for hours and sometimes even missed their flights.

As we kept inching closer to our own summer takeoff, we found ourselves frequently checking the situation on the official webpage of Swedavia (the airport operator). Computer programmers by trade and conviction, the thought of an automated monitoring solution (allowing to look at past trends and evolution) naturally came to mind. A brief look at the requests made by our browser made it clear that the information displayed next to the Waiting time in Security heading comes from a public HTTP endpoint:

The endpoint responds with simple JSON data like this:

[{"Id":5,"LongId":"Security Arlanda Terminal 2","TerminalId":["2"],
 {"Id":15,"LongId":"Security Arlanda Terminal 5 CB Lower","TerminalId":["5"],
  "Name":"Security Check F","ShortName":"F","LocationName":"Terminal 5F",
  "Interval":"at least 45 min","CurrentProjectedQueueTime":1800,

The official status webpage displays the value of Interval (in this case, "at least 45 min" for security checkpoint 5F), while there is a value of 1800 for CurrentProjectedQueueTime. After a couple observations, it is clear that the latter is interpreted in seconds, so that would be 30 minutes in this case. But we must keep in mind that the airport has decided against publishing the latter figure. However, when they do publish a concrete value, it is equal to the one published in CurrentProjectedQueueTime (converted to minutes).

So what we do with the query result is parse out the CurrentProjectedQueueTime for each security checkpoint, stuff them into an RRD database, and finally plot the MAX-aggregated time series data. We schedule a query every 5 minutes. This is what you see on the upper (main) part of the graph.

We also look at the Interval to see if it sensibly matches the projected queue time: an interval of "6 mins" validates a queue time of 360, signalling that the figure actually made it to the official status page. Meanwhile, an interval of "–" or "at least 45 mins" is taken as a sign that the This service is temporarily closed ... message was displayed instead of the projected queue time, marking it invalid. This attribute is drawn on the lower part of the graph (labeled Valid on the left axis); presence of colour for a given terminal signals our belief that the queue time in the graph was actually displayed to visitors of the official status page.

Given that a waiting time of 45 minutes seems like some magical threshold in this system, we draw a horizontal rule for that. Interestingly, though, the trigger for hiding the queue times from status page visitors does not seem to be directly linked to queue times breaching this limit. We do not have a good explanation for this. Rather, it seems like the airport decides to show the projected queue times to status page visitors on a discretionary basis.

There are some other fields that might be meaningful, such as IsDisabled, which we currently discard. The queue time might be zero because they are ready for new passengers, or maybe the checkpoint (or the terminal) is closed. Please check directly with the airport.


This is our own sampling and post-processing of data published by Swedavia, created for our private use but published on the open Internet in case others find it interesting or useful. We are unaffiliated with Swedavia (or any other commercial entity) and this page is in no way authoritative. We believe that the data shown in the graph above is a fair representation of what we have received from Swedavia via their HTTP endpoint, but we have no opinion on whether the received values are accurate or meaningful. We expressly disclaim any responsibility for bugs or other errors while processing the received data to create the above graph.

The above graph shows data even when the airport's official webpage displays this text: This service is temporarily closed since time indications are not shown correctly when the waiting time exceeds 45 minutes. All while numbers in the graph (as received from Swedavia's HTTP endpoint) are well below 45 minutes. We believe we detect when the numbers are officially shown (see the Valid area in the graph, with explanation above), but this is based on a heuristic only. We make no promises on the accuracy or validity of the data; please draw your own conclusions.


We might delete this page at any moment without prior notice.

Privacy statement

We collect standard webserver logs in the course of serving this webpage. These logs contain identifiers which might be used to identify visitors by IP address, user agent and such. Logs are persisted until logrotate decides it's time to wipe them out. That said, we do not care about you (sorry!) unless you start abusing our systems – in which case we will take steps to stop you from harming us.

Why does this look like it was made in 1998?

So that you hopefully get the right idea even without reading: that this is not an official webpage (with its cute/slick looks and cookie/chat popups). You can thank us for omitting the obligatory BLINK tag, the pulsating purple-green background and the admonition to use Netscape Navigator!


You can send us feedback or share your personal experiences (anecdotal evidence): No response guaranteed.