Is Manaus Getting Hotter? Satellite Data
2026-09-29 · by
powered by data and coffee (sometimes data about coffee), a marketing and growth leader with the technical depth to execute and the experience to lead. started out as a copywriter, never stopped writing, but specialized in leading creative and growth projects — from multinationals and fintechs to B2B SaaS niches smaller than a dresser. would love to run sql queries against his own fragile memory, and keep a recursive function running to remind him to drink more water (without touching the coffee intake).
After a long time away from Manaus, I ended up arriving in the hottest season. And the best way to explain it is that I used to joke that Manaus had only two seasons: summer and hell.
That last visit happened in hell. But I didn't remember the heat being this Dantesque. So the question came up: is Manaus getting hotter? Or have I just gotten unused to the heat?
Only the data could answer that.
And it scared me so much that the project Manaus Odeia Árvores ("Manaus Hates Trees") was born.
The start of the project: why does Manaus have no trees?
Looking at photos from several decades ago, long before the Manaus Free Trade Zone and the city's disorderly growth, I was struck by the clothes people wore. Heavy clothes, more than one layer. Yet no one in the photos looked like they were about to faint.
And the main difference between then and now was the amount of asphalt, concrete and buildings; heat islands that replaced the green areas once interspersed throughout the city. My father used to tell of his childhood, jumping in the igarapé (a small Amazonian stream) and wandering into the woods, and it sounded like a place very far from where I am now. When, in fact, it's less than 5 km from here.
In those same old photos you can also see that avenues and streets were lined with trees. Today, a quick stroll through Google Maps shows the gray immensity Manaus has become.
That was my starting point: Manaus has a terrible relationship with trees. Ah, the irony of being in the heart of the Amazon, the “lungs of the world,” and slowly suffocating!
The data on Manaus's heat and vegetation (and maybe we should talk about sovereignty over it)
I wanted to find a correlation between these two things: temperature and vegetation. The initial idea was to use a long time frame, but the quality and/or availability of the data limited me to two and a half decades (2001-2025).
And my first finding was, to say the least, strange (not to say crazy): Manaus seemed to be cooling down from 2020 on. Even though the researchers, the people and the sweat mark on my chair screamed the opposite.
So I went digging.
It was from that moment (2020) that the satellite's pass, and consequently the surface reading, was moved up by 1 hour. It used to happen at 10:28AM and started happening at 9:19AM. And if you know Manaus, you know the absurd difference in the sun's violence between 9 and 10 a.m.
And here is my point about sovereignty, in case it isn't obvious: not producing data (or not making it easily available) makes our production of knowledge, at best, imprecise. And, at worst, co-opted; in the service of (or at the mercy of) other countries.
So as not to get too technical, I left notes on data origin, process and cleaning at the end. But the point is: thanks to a decision by the American government (the satellite belongs to NASA), the temperature had to be modeled from the change in the satellite's pass, which possibly ended up eliminating extremes (both hot and cold).
The hottest place in Manaus (and the coldest) and why Manaus hates trees
The initial limitation of the available data was extremely frustrating. There I was, eager for a study with 100 years of data on the city, and suddenly I had to settle for 25 years.
Until I found an experimental zone: the Cidade Nova neighborhood. Its big expansion began exactly in the initial period of the data and is consolidating in the final period. If you work in marketing, it's as if Manaus had run a geo holdout: it held back expansion in one area so that, decades later, I could calculate the incrementality of temperature from the reduction of green areas. And how frightening that was.
The region lost 35% of its vegetation over the period and saw temperature rise 3x faster than the city average over the same period. That's 2.9ºC more in just 25 years.
Cidade Nova is relatively close to the Adolpho Ducke Reserve, a preserved area that gets almost 9ºC cooler than Petrópolis, the hottest neighborhood in the city. And that proximity also helped calculate how much hotter a place gets for every kilometer away from a green area: almost +0.4ºC. From the 6th kilometer on, it hits a plateau, which may be because Manaus has a relatively small urban area still surrounded by forest in the rural zone. Or because there is a limit to how much a forest can help.
In short, Manaus will become uninhabitable
Parks without trees (yes, amazing!), parks with trees that don't cast shade (again, amazing!) and constant fires in the dry season both within the urban perimeter and in the “metropolitan area.”
Perhaps a good example of how public administration does (not) think about the climate crisis: after cutting down several trees on an avenue, the city government replied that it would plant many more saplings somewhere else. As if a tree were a bank balance: I took it out of this account, but put it into that one.
In a decade, the forecast is that for 2/3 of the year Manaus will suffer from extreme heat. And that has an impact on both health and the economy. On the economy, of course, because energy gets more expensive, as do various products, whether because drought keeps boats loaded with goods from arriving, or because of higher costs, or because local producers can't produce. But health also pays a high price: cardiovascular risks go up, especially for children and the elderly, and the body can't rest at the end of the day because of the heat.
So Manaus will become uninhabitable. More so for some than for others.
After all, if you can air-condition your whole house and use it all day, heat is not a problem for you. If you have a car with air conditioning and don't depend on sidewalks or public transport to get around, heat is not a problem for you. If the cost of the most expensive energy in Brazil gets even higher, but that represents a fraction of your income, heat is not a problem for you.
The climate catastrophe falling on Manaus is as much social as it is environmental.
The end will be Instagrammable
When I started this project, I only wanted to answer:
- Is Manaus getting hotter according to the data?
- If so, by how much?
That gave rise to alarming data, a distressing website (Manaus Odeia Árvores) and a text I don't quite know how to end. Because, after all, I just wanted to retrace the project's steps to document the process.
But remembering the future that awaits us turned this text into a long epitaph for Manaus.
May our beautiful sunset, behind the completely dry river and the smoky green, at least keep earning likes stored in some data center.
Thanks to my friend Rick Stanley for the suggestions, the improvements, and for getting outraged with me over Manaus's lack of trees.
For the nerds.
More about the data
Sources
- Surface temperature (LST): MODIS Terra, product MOD11A2, 1 km resolution, accessed through Google Earth Engine. Covers January 2001 to December 2025 and is granular enough to compare neighborhoods and vegetated areas. The product comes in 8-day composites, which I aggregated into monthly means.
- Vegetation (NDVI): MODIS Terra, product MOD13Q1, 250 m resolution. I aggregated the pixels into 1 km cells, the same grid as the temperature, which lets me cross the two variables by cell identifier. The area covers about 50 × 39 km and 2,040 cells, with 300 months per variable.
- Water mask: the Rio Negro, which surrounds the city, has negative NDVI and showed up as a degraded area. I masked the water using the JRC water occurrence layer (
JRC/GSW1_4). The threshold (50%) came from the actual distribution of values, which is bimodal, not from a guess. - Auxiliary sources: the Open-Meteo Archive (air temperature at 2 m, reanalysis with a native resolution of about 31 km) and the reference points from a UEA (State University of Amazonas) study (2002-2012). The first fed the correction described below. The second served as validation: the neighborhoods the study identifies as hottest (Petrópolis, Aleixo, Japiim, Cidade Nova) and coldest (Reserva Ducke, Ponta Negra) were also verified in my data.
I extracted everything with simple Python scripts and the tables ended up in Parquet, one file per year, for the joins.
Cleaning
Each criterion was applied to the raw data and documented with the number of values affected. Nothing was deleted: the invalid value became null.
- Sensor quality: I accepted pixels with flags 0 and 1 and rejected only the “not produced” ones. The stricter mask zeroed out 100% of the nighttime readings, because MOD11A2 almost never flags nighttime LST with the strictest flag.
- Plausible range: 58 daytime and 30 nighttime readings outside the range (the most absurd, −7.5 °C) became null. Probably clouds in very cloudy months.
- Impossible thermal inversion: 82 cell-months in which the night was more than 5 °C warmer than the day, which doesn't happen in an equatorial city. It was always the daytime reading that was wrong.
- Statistical anomaly: values more than 4 standard deviations from the mean of the cell itself in the same calendar month. That was 430 daytime values and 6 nighttime values.
The most instructive case was June 2001. A heat spike showed up in about 30 neighboring cells and the explanation seemed obvious, a real event. It wasn't. June 2001 had a cold record in Manaus and not a single valid nighttime reading across the whole grid: the “spike” came from the few daytime pixels that were left, contaminated by cloud. I only realized this after checking the month against an external source.
Orbital drift and correction
Terra has not received an orbit-correction maneuver since 2020, and the local pass time has been moving earlier. I confirmed this with the product's own Day_view_time band: the daytime pass was stable around 10:28 between 2001 and 2020 (standard deviation of 7 minutes) and dropped to 9:19 in 2025. The surface is still warming up in the morning, so a reading one hour earlier comes out artificially colder.
The first attempt was a linear regression of LST against the pass time, to estimate °C per hour. It didn't work: the result was −0.54 °C/h. In the reference period the time varies too little for the regression to separate the effect of the time.
The way out was to use a real hourly curve. I downloaded hourly air temperature from Open-Meteo (2001-2020) for a point in downtown Manaus and calculated the mean for each hour of the day. It shows that the rise from 9 a.m. to 10 a.m. (+0.90 °C) is much steeper than the one from 2 p.m. to 3 p.m. (−0.19 °C). But that curve is for the air, and what I need to correct is the surface. To convert it, I calibrated an amplification factor k:
k = (LST_day − LST_night) / (Air_day − Air_night)
I use the difference between the two passes that the LST itself already has (~10:28 and ~22:31, mean 2001-2020). The surface varies 5.66 °C between them and the air, about 2.4 °C, which gives k = 2.34. The monthly correction is:
correction = k × (Air at reference hour − Air at actual pass hour)
I kept the raw data and saved the corrected data in separate columns. The effect was large: 2025, which came out as an extreme outlier (−2.9 standard deviations), goes to +1.4, within the normal range. The real drought years (2023 and 2024) become even hotter after the correction, because the change in the reading time was distorting the result.
Limitations
kis a single number, calibrated with two times and one air point, and it applies equally to the whole city. It under-corrects extreme values: a very hot pixel warms up faster in the morning than the average used in the calibration. That's why the site doesn't show a “maximum recorded temperature.”- The satellite passes twice a day and never sees the afternoon peak (2 p.m. to 3 p.m.). What the map shows is the surface temperature at the time of the pass, not the day's maximum and not the air temperature.
- The air data come from reanalysis in cells of ~31 km, wider than the whole city.
- Clouds leave holes, because they block the reading. I treated them as nulls.
