A data-backed approach for securing tickets to see Rome’s Colosseum
A complete guide for planning your trip to the Colosseum
About this project: Goals, techniques, and key findings
The goal of this project was to create a strategy that optimizes the likelihood of obtaining Colosseum tickets from the official website (Coopculture). This strategy will allow you to avoid the high fees charged by third-party resellers who use bots to purchase the majority of tickets within seconds of their release. To this effect, I wrote a computer program using Python and Selenium to track the ticket availability for entry into the Colosseum from the official website. Ticket availability was queried for 14 consecutive days in intervals between 3 seconds and one minute. The main findings of this work show that tickets are released on a rolling basis exactly 30 days, 7 days, and 1 day before the timed ticket entry. We find that the initial release of tickets sells out the fastest, and tickets released 7 days and 1 day before the entry time are available for longer.
Based on these findings, a detailed plan is proposed to ensure that you secure your tickets from the official website, including a strategic approach to navigating the website. In the final section of this post, we discuss the code in detail and its main features, including my approach to collecting, storing, manipulating, and visualizing the data as well as the feature of the code that allows the user to be sent instantaneous email alerts with embedded links when tickets become available.
The complete code for this project can be found on GitHub.
Jump to a section:
- Introduction
— General background and motivation
— Ticket types - Methods
— Tracking ticket availability using Python and Selenium - Summary of web scraped data
— Ticket entry times
— Ticket release times and availability - Conclusions
— My suggested strategy for securing your tickets
— A time-saving hack for beating the bots
— Final details for planning a successful trip to Rome’s Colosseum - Details on the Python code for tracking ticket availability
— — — — — — — — — — — — — — — — — — — — — — — — — — — —
Introduction
General background and motivation
Tickets to enter the Colosseum are notoriously difficult to obtain from the official website (Coopculture) as only a limited supply of timed entry tickets are released 30 days in advance, and the majority of those tickets are scooped up by third-party bots within seconds of being posted. These third-party resellers (e.g. Viator, Get Your Guide, Tiqets, etc.) then sell the tickets for a markup, sometimes for more than 10x the original ticket price.
Ticket types
There are three main ticket types you can purchase: the regular experience ticket (€18), the full experience arena ticket (€24), and the full experience undergrounds and arena ticket (€24). The following description of each ticket type was adapted from the Coopculture website (see the Colosseum website for more details PARCO):
“““
ADMISSION TICKETS
Regular experience ticket (€16 + €2 booking fee): Valid for 24 hours from the first use, it allows one entrance to the Colosseum and one entrance to the Palatine Hill-Roman Forum area.
Full Experience Arena ticket (€22 + €2 booking fee): Valid for 48 hours from the first use, it allows one entrance to the Colosseum with access to the Arena, one entrance to the Palatine Hill-Roman Forum area, and entrance to all the S.U.P.E.R sites within the Palatine Hill-Roman Forum area.
Full Experience Undergrounds and Arena ticket (€22 + €2 booking fee): Valid for 48 hours from the first use, it allows one entrance to the Colosseum with access to the Undergrounds and Arena, one entrance to the Palatine Hill-Roman Forum area, and entrance to all the S.U.P.E.R sites within the Palatine Hill-Roman Forum area. These tickets are nominative and you will not be allowed to enter the underground unless your ID matches the name on the ticket.
”””
NOTES:
- The Palatine Hill-Roman Forum area is located right next to the Colosseum and contains the ruins of ancient Rome. The Palatine Hill section is where the emperors of ancient Rome built their palaces and contains some nice views of the Circus Maximus and the Roman Forum section. The Roman Forum section is where all the political meetings and social gatherings of ancient Rome took place. The two sections are connected and the boundary between them is not perceptible (i.e. you can walk between the two sections without knowing it).
- The S.U.P.E.R (Seven Unique Places to Experience in Rome) sites are special attractions inside the Palatine Hill-Roman Forum area and are only accessible with a full experience ticket. See the PARCO website for more details on these sites including dates of closure for maintenance.
- Each ticket gives you one-timed entry to the Colosseum and one entry to the Palatine Hill-Roman Forum area. You can visit the Palatine Hill-Roman Forum areas before or after your Colosseum visit, but it must be within 24 hours (for regular experience ticket) or 48 hours (for full experience ticket) of your timed entrance to the Colosseum.
Based on this information, the full experience undergrounds and arena ticket is the best value, but the limited number of tickets and their high demand make these tickets the most difficult to secure.
Methods
Tracking ticket availability using Python
To gain insight into the optimal time to purchase your desired tickets, I used a computer program written in Python to track the release time of tickets and how long the tickets are available before they are sold out. I found it useful to use two different programs: one for tracking tickets at the initial release time where I would query the website every few seconds and one for tracking tickets across all available days where I would query the website once every minute. More details about the specifics of the Python scripts used for tracking the ticket availability are presented in the final section of this document. You could also read the Python scripts directly on the GitHub Repo as they are commented.
Each time the website was queried for a specific ticket type, the program first checks if there are any days with tickets available and then records the ticket information such as ticket type, entry date and time, and the number of tickets available at the time the website was queried. After collecting the data for all available tickets, the page is refreshed and the available ticket information is collected again.
A quick note: On the coopculture website you will also find regular experience and full experience tickets with a guided tour included. These tours are typically offered 1–2 times a day and are given in French, Spanish, Italian, and English. For this project, I only tracked the ticket availability for the English didactic tour and combined its availability with that of the ordinary or full experience ticket. Additionally, the Colosseum offers a limited number of tickets for visiting the Colosseum at night (8:30 PM CET) only on certain days. These tickets are equivalent to the full experience English didactic tour tickets. In the analysis presented below, these tickets were tracked and the data was combined with the full experience tickets.
Summary of web scraped data
Ticket entry times
In Figure 2, I show selected entry times for Regular experience tickets (left panel), full experience arena tickets (central panel), and full experience undergrounds and arena tickets (right panel). For regular experience tickets, the entry times are spaced in 5-minute intervals starting at 9:15 a.m. CET (Rome time). The full experience tickets are not available every 5 minutes as in the regular experience ticket, with underground access tickets only containing 19 entry times for the whole day. Since only about 20 tickets are released per time slot for full experience with underground access tickets, that means that less than 400 out of the almost 20,000 daily visitors can visit the Colosseum’s undergrounds. At present, I do not have a way of determining which time slots will be available for a given day before they are released, as the entry times vary from day to day and week to week. It seems that 9:00 a.m. CET is always the first time slot available for underground access and 9:15 a.m. CET for arena-only access and regular experience tickets, but more exploration is needed to confirm this.
Ticket release times and availability
For both the regular experience and full experience options, tickets are released on a rolling basis precisely 30 days from the timed entry. For example, tickets for a 9:00 a.m. CET timed entry on July 31st will be released at precisely 9:00 a.m. CET on July 1st. Similarly, tickets for a 1:30 p.m. CET timed entry on July 31st will be released at precisely 1:30 p.m. CET on July 1st.
Regular experience tickets
Figure 3 illustrates the regular experience ticket availability when the website was queried 30 days before the entry date, 7 days before the entry date, 1 day before the entry date, and the day of the entry date. These illustrations (heatmaps) should be interpreted as follows: each cell block contains the maximum number of tickets available during the two weeks (April 21st, 2023 — May 5th, 2023) that the search was performed for an entry time within the time given by the width of the block and when the website was queried during the time interval given by the height of the block. For example, the 17 in the upper left cell of Figure 3a means that there was a maximum of 17 tickets available at any given moment between April 22nd, 2023 — May 5th, 2023 for entry times between 9:15 am and 9:45 am when I queried the website between 9:15 am and 9:45 am. A blank cell means no tickets were ever detected during that query timed interval.
As seen in the upper left heatmap, which illustrates the number of tickets available 30 days before your visit, tickets are released on a rolling basis exactly 30 days before the ticket entry time which is why the upper right portion of this heatmap is blank. Early morning entry times sell out the fastest, usually within a few seconds of being posted. Sometimes residual tickets are found at later times, which I think happens because people cancel their cart or something goes wrong with the transaction. For entry times later than 17:00CET, tickets do not sell out as quickly and are probably your best chance of getting tickets for a larger group, say a family of 6. As I discuss below in the additional notes section, I don’t see any issue with purchasing these later entry-time tickets, so long as you plan your day appropriately. The last timed entry is one hour before closing, which should be enough time to explore most of what the Colosseum has to offer.
Interestingly, there is a second batch of tickets that are released on a rolling basis exactly 7 days before the ticket’s entry time (figure 3b). So if you missed the initial ticket release and all of the tickets were sold out, you can still wait to secure tickets 7 days before your visit. Finally, there is a good chance of securing tickets within 24 hours of the entry time (Figures 3c and 3d), which I would recommend doing instead of trying to get tickets at the ticket office. You should start checking at 8:00 pm CET the night before the day of your visit.
All in all, it should be possible to secure this type of ticket near your desired time so long as you are actively checking the website at the time of release and have a reasonable internet connection. To optimize your chances of getting your ticket, follow the strategy provided in the conclusions section of this post.
Full experience tickets
Securing full-experience tickets is a somewhat different story. The main challenge to getting these tickets is that they sell fast. Really fast. So fast that, even if you refresh the webpage on the exact moment that tickets are released, by the time it takes you to add the ticket to the cart (select ticket time, select amount of tickets, and bypass reCAPTCHA) the tickets will be sold out and you will be displayed with a disheartening error message saying “tickets are no longer available for your selected time.” Even still, if you are a bit flexible on the day or time of your visit to the Colosseum, are very active in trying to secure tickets, and have a strong internet connection, there is a chance of securing a couple of the full experience with arena access tickets. To get the full experience with underground and arena access, you need all of the former plus luck. During my visit to the Colosseum, I asked one of the Colosseum’s underground accompanying guides about the number of underground tickets and she said that only 15–20 tickets are released per time slot. It might also be true that ‘official partners’ (e.g. Get Your Guide, Viator) get priority access to the tickets that they want, but I cannot prove this.
Figure 4 illustrates the full experience ticket availability when the website was queried (a) 30 days before the entry date, (b) 30 days before the entry date but only tickets with underground access are shown, (c) 7 days before the entry date, and (d) the day of the entry date. In Figures 4a and 4b, the empty columns centered at 10:00 am and 1:30 pm in Figure 4a and 10:00 am, 11:30 am, 1:30 pm, and 2:30 pm in Figure 4b are expected because the full experience tickets are not released in five-minute intervals as with regular experience tickets as we first saw in Figure 3 above. Figures 4a and 4b illustrate the difficulty in obtaining full-experience tickets on the day that they are released, especially if you are interested in underground access. The best time to lock down your tickets is the instant they are released, with an even better chance of getting tickets if you choose an evening time slot. Also, frequently one will find single tickets available at random entry times throughout the day. I guess that most people go to the Colosseum with more than one ticket so these tickets linger.
As with the regular experience tickets, a second batch of tickets is released 7 days in advance and the day before your visit. These tickets tend to not sell out as fast as the ones released 30 days before your visit. I have never seen the availability of tickets from 29 days — 8 days or 6–2 days before the ticket date, so I would not even bother checking the official website for these tickets.
Conclusions
My suggested strategy for securing your tickets
Based on my research and time spent tracking ticket availability using Python code, I recommend the following approach to secure your tickets to the Colosseum:
First, you should decide which ticket you want to purchase: regular experience, full experience arena, or full experience undergrounds and arena (see the section on ticket information above for the details of each ticket type).
Follow these steps if you want regular experience tickets:
- Exactly 30 days before your visit, constantly check the official website for available tickets at your desired time. Tickets are released on a rolling basis every 5 minutes starting at exactly 9:15 a.m. [CET]. Each batch of tickets will be sold within seconds of being released, but there should be enough time to secure a couple of tickets, especially if you follow the query hack explained below. A second batch of tickets will go on sale 7 days before the visit date and there will likely be availability within 24 hours of the visit, but securing a specific time slot may be more challenging.
Follow these steps if you want full experience tickets:
- Exactly 30 days before your visit: Constantly check the official website for available tickets at your desired time. Tickets are released on a rolling basis, starting at 9:00 am [CET], but not every 5 minutes as with the regular experience tickets (see the section on ticket entry times above for more details on ticket release times). Early morning tickets are nearly impossible to procure, but you may get lucky with some afternoon availability. You could likely purchase tickets for one of the last entry times, which can work out just fine if you plan your day accordingly (see points 1 and 2 in the section “Other details for planning your trip to the Colosseum” below). Since every second counts when trying to secure these tickets, I have devised a plan of attack to snipe tickets as soon as they are posted to the website — see “A hack for scoring full experience tickets” section below.
- Between 8 days and 30 days before your visit: If you fail to obtain tickets on the release date, then I am afraid you will have to wait until 7 days before your trip before tickets will become available again on the official website. You can still hope to get lucky and periodically check the official website for ticket releases (or use the code in this repo to track ticket availability and automatically email you with any status changes). Another option is to purchase tickets from a third-party vendor (e.g. Get Your Guide or Viator). These sites usually have an option to get a full refund on your tickets up to 24 hours in advance, which is good since there is still a possibility to get tickets from the official website. The markup on the tickets can be anywhere from 1.5 to 10x the original cost of the ticket, with underground access being especially costly. Also, sometimes these sites don’t give you a ticket, but instead meet you outside of the Colosseum and Palatine Hill-Roman Forum area to let you in, which is not ideal if you want to explore on your own schedule.
- Exactly 7 days before your visit: The most likely time to find a ticket on the official Colosseum website is exactly 7 days before your visit time when a second batch of tickets is released on a rolling basis as was done on the initial release date. Again, follow the same strategy as you did in step 1 and you may have some more luck since these tickets don’t appear to go as fast. It is also possible to find tickets available within 24 hours of your entry time, but that is cutting it too close for me and you will no longer have the option to return any tickets purchased from third-party sites.
Finally, there is still a chance to get tickets on the day of your visit, but expect long Queues and limited availability.
Will this approach work? It did for me!
A time-saving hack for beating the bots
Given that both regular experience and full experience tickets sell out within a few seconds, you need to be very efficient when navigating the website to buy your ticket. The mistake I think most people will make is to refresh the whole page when they are waiting for tickets to be released. This will force the browser to render all the graphics on the webpage and then you will have to use the calendar to navigate to the correct month. The more efficient approach is to use the calendar arrows to repeatedly switch between the current month and the month that you want to get your tickets. If you are lucky enough to see the day turn green, and hence become clickable, you can then repeatedly click the calendar day as it will remain clickable even if there are no available tickets at that time.
Final details for planning a successful trip to Rome’s Colosseum
- You can visit the Palatine Hill-Roman Forum area before or after your Colosseum visit but it must be within 24 hours (for regular experience ticket) or 48 hours (for full experience ticket) of your timed entrance to the Colosseum. It is not possible to enter the Colosseum at a time that is different than your listed time. However, this means that it is not essential to secure early morning tickets since you can plan to visit the Palatine Hill-Roman Forum area before you visit the Colosseum. Of the three sites, the Colosseum requires the least amount of walking so it could make sense to save it for last.
- In terms of planning your day, it will take between 4.5–6 hours to fully explore the three sites (Colosseum, Palatine Hill, and Roman Forum), spending between 1.5–2 hours at each site. It is a lot of walking and can be especially tough on your heels because most of the ground is cobblestone. On my visit to the Colosseum, I took 18,000 steps and climbed 20 flights of stairs according to my iPhone Health app. One nice feature of the Palatine Hill-Roman Forum area is that there are several water fountains to refill your bottles with cold water and shady benches to sit and relax.
- Note that the full experience undergrounds and arena tickets are nominative (i.e. it contains the ticket holder’s name) and you must provide this information during the checkout process. This is especially important to note if you are buying the ticket for someone else or many people. You will not be allowed into the undergrounds if your ID does not match the name on the ticket and you cannot change the name on the ticket once it has been sold to you.
- You can still see the Undergrounds from above with a full experience arena ticket, but you will not get to walk through the undergrounds. So not getting an underground access ticket is not the end of the world. I would not pay the extra money to buy a ticket with underground access from a third-party reseller if I could get the full experience arena ticket from the official site.
- Despite the widespread claim online that the website is ‘glitchy’ or ‘buggy’, I have not found this to be the case. Tickets sell out very fast, so even if you see tickets available at one moment in time, they may be sold out by the time you hit ‘add to cart’ and bypass Recaptcha. This can be quite frustrating, but I would not call it a bug. Once you have the tickets in the cart, they are secure for 15 minutes while you check out and you should not have any problems from this point on.
- The website slows down considerably near ticket release times when page requests are highest (we are not the only ones who are trying to buy tickets).
Details on the Python code for tracking ticket availability
There are two Python scripts in this repository for tracking ticket information, where both scripts use Selenium to automate web browsing and extract ticket availability. Each time the website is queried, the collected ticket availability information is stored in a Pandas dataframe which is depicted below. Each row of the dataframe reports the number of tickets available for a given timeslot and is indexed by a string of the form ‘queryDate_queryTime_ticketType’. The columns have two levels (hierarchical indexing) where the outer level is for the ticket date and the inner level is for the entry time of that date. The outer level is dropped when tracking ticket availability on a single date. Given that most queries will return no ticket availability, this dataframe is quite sparse (greater than 99% of entries are NaN) and so we use the Pandas built-in sparsity datatype (dtype = Sparse[float64, nan]). See sparse_date_structures for more information on sparse data types in Pandas.
Each script has several control parameters to set query frequency, email frequency, ticket type to track, which dates to track, and how frequently to save dataframe (saved as .pkl files).
1) ticket_tracker_single_day.ipynb: This script is optimized for tracking ticket availability on the release date, which is useful if you are trying to obtain a specific ticket type on a specific date and time. It contains functionality to send email alerts containing ticket information, including ticket type, entry date and time, number of tickets available, and link to the ticket.
2) ticket_tracker_all_days.ipynb: This script is meant to track the ticket availability across all 30 days for which tickets have been released and for all ticket types of interest. This script is less useful for securing specific tickets for a specific date and more useful for collecting data on ticket availability as a function of time. If not for this script, I may not have learned about the second batch of tickets released 7 days in advance of entrance time.
3) eda_single_day_plotsV0.ipynb: Notebook used to create heatmaps presented in this repository based on data collected using ticket_tracker_single_day.ipynb script.
4) eda_all_days_plotsV0.ipynb: Notebook used to create heatmaps presented in this repository based on data collected using ticket_tracker_all_days.ipynb script. Also provides some functions for manipulating the panda's dataframes with a hierarchical column structure.