Missing tiles for historical MODIS data

Use this Forum to find information on, or ask a question about, NASA Earth Science data.
martinkeller
Posts: 11
Joined: Tue Jul 30, 2024 5:33 am America/New_York
Answers: 0

Missing tiles for historical MODIS data

by martinkeller » Thu Dec 11, 2025 7:14 am America/New_York

Hi All,

I am trying to download historical MODIS NDVI data for India and I noticed that a lot of historical data doesn't seem to be available. In particular, before June 2022 only a few number of tiles for the MOD13Q1 and MYD13Q1 data products are available.
The particular tiles that I'm trying to access are 'h24v05', 'h24v06', 'h25v06', 'h26v06', 'h24v07', 'h25v07', 'h26v07', and 'h25v08'; only information for tile 'h25v08' is available.

Could you please let me know if this data is no longer available for download or if this a temporary outage?

Best regards,

Martin Keller
by LP - erik.bolch » Wed Jan 07, 2026 9:43 am America/New_York
Hi @martinkeller, I took at look at your issue and was able to replicate the missing tiles with the script you provided. Upon closer inspection, the issue has to do with the way the links are being extracted from the search results. For MOD13Q1, the granules have multiple 'data links'. This is always possible with data, one example being Harmonized Landsat-Sentinel, but in this case they are actually browse and .xml files that are incorrectly labelled in the metadata. When earthaccess retrieves the data links its also grabbing these. The subsetting with link = result.data_links()[0] grabs the first in the list, which can sometimes be a browse image. Since the browse images have a different naming convention the script is only returning a few tiles rather than all of them, even though you're showing the correct amount of results (882). I created an example notebook for retrieving the links that also has some more explanation.

I think initially if you were using earthaccess.download() to retrieve data, the likely culprit of missing tiles was the temporary CMR search outage in early December. That download function should download all of the data including the incorrectly tagged browse images.

As for MYD13Q1, the metadata is correct and it only has 1 link returned by data_links(), so this issue should not show up there.
Go to full post

Filters:

LP DAAC - dgolon
User Services
User Services
Posts: 201
Joined: Tue Dec 03, 2024 2:37 pm America/New_York
Answers: 0
Endorsed: 2 times

Re: Missing tiles for historical MODIS data

by LP DAAC - dgolon » Thu Dec 11, 2025 9:21 am America/New_York

Hi @martinkeller We are looking into this but so far everything looks normal from before June 2022. Could you please a) try again and b) if you are still seeing missing data for these granules let us know a few specific dates? Thanks -- Danielle
Subscribe to the LP DAAC listserv by sending a blank email to lpdaac-join@lists.nasa.gov.

Sign up for the Landsat listserv to receive the most up to date information about Landsat data: https://public.govdelivery.com/accounts/USDOIGS/subscriber/new#tab1.

martinkeller
Posts: 11
Joined: Tue Jul 30, 2024 5:33 am America/New_York
Answers: 0

Re: Missing tiles for historical MODIS data

by martinkeller » Thu Dec 11, 2025 9:43 am America/New_York

I just tried to download the data for DOY A2022129. I again requested the tiles 'h24v05', 'h24v06', 'h25v06', 'h26v06', 'h24v07', 'h25v07', 'h26v07', 'h25v08', but only got 'h24v05'.

LP DAAC - dgolon
User Services
User Services
Posts: 201
Joined: Tue Dec 03, 2024 2:37 pm America/New_York
Answers: 0
Endorsed: 2 times

Re: Missing tiles for historical MODIS data

by LP DAAC - dgolon » Fri Dec 12, 2025 9:30 am America/New_York

Hi @martinkeller For MOD13Q1 DOY A2022129 we are seeing granules for

'h24v05': https://search.earthdata.nasa.gov/search/granules?p=C1748066515-LPCLOUD&pg[0][v]=f&pg[0][id]=*24v05*&pg[0][gsk]=-start_date&g=G2278498627-LPCLOUD&q=MOD13Q1&qt=2022-05-09T00%3A00%3A00.000Z%2C2022-05-09T23%3A59%3A59.999Z&lat=35.0308593596&long=80.6972778301918&zoom=5.201467784613904

'h24v06': https://search.earthdata.nasa.gov/search/granules?p=C1748066515-LPCLOUD&pg[0][v]=f&pg[0][id]=*24v06*&pg[0][gsk]=-start_date&g=G2278498627-LPCLOUD&q=MOD13Q1&qt=2022-05-09T00%3A00%3A00.000Z%2C2022-05-09T23%3A59%3A59.999Z&lat=35.0308593596&long=80.6972778301918&zoom=5.201467784613904

'h25v06': https://search.earthdata.nasa.gov/search/granules?p=C1748066515-LPCLOUD&pg[0][v]=f&pg[0][id]=*25v06*&pg[0][gsk]=-start_date&g=G2278498627-LPCLOUD&q=MOD13Q1&qt=2022-05-09T00%3A00%3A00.000Z%2C2022-05-09T23%3A59%3A59.999Z&lat=35.0308593596&long=80.6972778301918&zoom=5.201467784613904

'h26v06': https://search.earthdata.nasa.gov/search/granules?p=C1748066515-LPCLOUD&pg[0][v]=f&pg[0][id]=*h26v06*&pg[0][gsk]=-start_date&q=MOD13Q1&qt=2022-05-09T00%3A00%3A00.000Z%2C2022-05-09T23%3A59%3A59.999Z

'h24v07':https://search.earthdata.nasa.gov/search/granules?p=C1748066515-LPCLOUD&pg[0][v]=f&pg[0][id]=*24v07*&pg[0][gsk]=-start_date&g=G2278498627-LPCLOUD&q=MOD13Q1&qt=2022-05-09T00%3A00%3A00.000Z%2C2022-05-09T23%3A59%3A59.999Z&lat=35.0308593596&long=80.6972778301918&zoom=5.201467784613904

'h25v07': https://search.earthdata.nasa.gov/search/granules?p=C1748066515-LPCLOUD&pg[0][v]=f&pg[0][id]=*25v07*&pg[0][gsk]=-start_date&g=G2278498627-LPCLOUD&q=MOD13Q1&qt=2022-05-09T00%3A00%3A00.000Z%2C2022-05-09T23%3A59%3A59.999Z&lat=35.0308593596&long=80.6972778301918&zoom=5.201467784613904

'h26v07': https://search.earthdata.nasa.gov/search/granules?p=C1748066515-LPCLOUD&pg[0][v]=f&pg[0][id]=*26v07*&pg[0][gsk]=-start_date&g=G2278498627-LPCLOUD&q=MOD13Q1&qt=2022-05-09T00%3A00%3A00.000Z%2C2022-05-09T23%3A59%3A59.999Z&lat=35.0308593596&long=80.6972778301918&zoom=5.201467784613904

'h25v08': https://search.earthdata.nasa.gov/search/granules?p=C1748066515-LPCLOUD&pg[0][v]=f&pg[0][id]=*25v08*&pg[0][gsk]=-start_date&g=G2278498627-LPCLOUD&q=MOD13Q1&qt=2022-05-09T00%3A00%3A00.000Z%2C2022-05-09T23%3A59%3A59.999Z&lat=35.0308593596&long=80.6972778301918&zoom=5.201467784613904


Just to rule this out, just in case, if you were expecting MYD13Q1 data that day, there would be no data over your area on 2022129 due to the temporal resolution of the data (16 day). The area would have MYD13Q1 data for 2022121 and 2022137.
Subscribe to the LP DAAC listserv by sending a blank email to lpdaac-join@lists.nasa.gov.

Sign up for the Landsat listserv to receive the most up to date information about Landsat data: https://public.govdelivery.com/accounts/USDOIGS/subscriber/new#tab1.

martinkeller
Posts: 11
Joined: Tue Jul 30, 2024 5:33 am America/New_York
Answers: 0

Re: Missing tiles for historical MODIS data

by martinkeller » Tue Dec 16, 2025 7:55 am America/New_York

Thank you for your reply. I have looked over the links you provided and all the relevant data does indeed seem to be available.

In order to get to the bottom of why I can't seem to find the data I put together a small Python script to check what data is available when I query the Nasa Earthdata catalogue using Python:

import earthaccess
from datetime import datetime
from collections import defaultdict
import os

# credentials redacted!

EARTHDATA_USERNAME = ""
EARTHDATA_PASSWORD = ""


PRODUCT = "MOD13Q1"
VERSION = "061"
START_DATE = "2022-05-01"
END_DATE = "2022-05-31"

FILTER_TILES = [
"h24v05",
"h24v06",
"h25v06",
"h26v06",
"h24v07",
"h25v07",
"h26v07",
"h25v08",
]


def check_tiles():
"""Check all available tiles for the configured date range"""

def get_tile(link: str) -> str:
filename = link.split("/")[-1]
return filename.split(".")[2]

def get_date(link: str) -> str:
filename = link.split("/")[-1]
return filename.split(".")[1]

def julian_to_date(julian_str: str) -> str:
"""Convert A2022129 to 2022-05-09"""
try:
return datetime.strptime(julian_str, "A%Y%j").strftime("%Y-%m-%d")
except:
return julian_str

print(f"\n{'='*80}")
print(f"MODIS Tile Availability Check")
print(f"{'='*80}")
print(f"Product: {PRODUCT}.{VERSION}")
print(f"Date Range: {START_DATE} to {END_DATE}")
if FILTER_TILES:
print(f"Filtering for tiles: {', '.join(FILTER_TILES)}")
print(f"{'='*80}\n")

# Login with credentials
print("Logging in to NASA Earthdata...")
os.environ["EARTHDATA_USERNAME"] = EARTHDATA_USERNAME
os.environ["EARTHDATA_PASSWORD"] = EARTHDATA_PASSWORD
earthaccess.login(strategy="environment", persist=False)
print("Login successful!\n")

# Search for data
print(f"Searching for {PRODUCT}.{VERSION} data...")
results = earthaccess.search_data(
short_name=PRODUCT, version=VERSION, temporal=(START_DATE, END_DATE)
)
print(f"Found {len(results)} total results\n")

# Group results by date and tile
tiles_by_date = defaultdict(list)
all_tiles = set()

for result in results:
try:
link = result.data_links()[0]
tile = get_tile(link)
date = get_date(link)
filename = link.split("/")[-1]

# Apply tile filter if specified
if FILTER_TILES and tile not in FILTER_TILES:
continue

tiles_by_date[date].append(
{"tile": tile, "filename": filename, "url": link}
)
all_tiles.add(tile)

except (IndexError, AttributeError):
continue

# Display results
print(f"\n{'='*80}")
print(f"RESULTS BY DATE")
print(f"{'='*80}\n")

sorted_dates = sorted(tiles_by_date.keys())

for date in sorted_dates:
readable_date = julian_to_date(date)
tiles = tiles_by_date[date]
tile_ids = sorted([t["tile"] for t in tiles])

print(f"Date: {date} ({readable_date})")
print(f" Tiles found: {len(tiles)}")
print(f" Tile IDs: {', '.join(tile_ids)}")

for t in sorted(tiles, key=lambda x: x["tile"]):
print(f" {t['tile']}: {t['filename']}")

print()

# Summary
print(f"{'='*80}")
print(f"SUMMARY")
print(f"{'='*80}")
print(f"Total dates with data: {len(sorted_dates)}")
print(f"Unique tiles found: {len(all_tiles)}")
print(f"All tiles: {', '.join(sorted(all_tiles))}")

if FILTER_TILES:
print(f"\nRequested tiles: {', '.join(FILTER_TILES)}")
found_tiles = all_tiles.intersection(set(FILTER_TILES))
missing_tiles = set(FILTER_TILES) - all_tiles
print(f"Found: {', '.join(sorted(found_tiles)) if found_tiles else 'None'}")
if missing_tiles:
print(f"Missing: {', '.join(sorted(missing_tiles))}")

print(f"{'='*80}\n")


if __name__ == "__main__":
check_tiles()


The output on my system looks as follows:

================================================================================
MODIS Tile Availability Check
================================================================================
Product: MOD13Q1.061
Date Range: 2022-05-01 to 2022-05-31
Filtering for tiles: h24v05, h24v06, h25v06, h26v06, h24v07, h25v07, h26v07, h25v08
================================================================================

Logging in to NASA Earthdata...
Login successful!

Searching for MOD13Q1.061 data...
Found 882 total results


================================================================================
RESULTS BY DATE
================================================================================

Date: A2022113 (2022-04-23)
Tiles found: 1
Tile IDs: h25v07
h25v07: MOD13Q1.A2022113.h25v07.061.2022136104657.cmr.xml

Date: A2022129 (2022-05-09)
Tiles found: 1
Tile IDs: h24v05
h24v05: MOD13Q1.A2022129.h24v05.061.2022146013223.cmr.xml

Date: A2022145 (2022-05-25)
Tiles found: 1
Tile IDs: h25v08
h25v08: MOD13Q1.A2022145.h25v08.061.2022168103048.hdf

================================================================================
SUMMARY
================================================================================
Total dates with data: 3
Unique tiles found: 3
All tiles: h24v05, h25v07, h25v08

Requested tiles: h24v05, h24v06, h25v06, h26v06, h24v07, h25v07, h26v07, h25v08
Found: h24v05, h25v07, h25v08
Missing: h24v06, h24v07, h25v06, h26v06, h26v07
================================================================================

It seems like quite a few tiles are not found, despite the fact that they do exist. Could this perhaps be related to the metadata catalogue issues from a few weeks ago?

Best regards,

Martin Keller

LP DAAC - kyrad
User Services
User Services
Posts: 1
Joined: Wed Mar 05, 2025 2:40 pm America/New_York
Answers: 0

Re: Missing tiles for historical MODIS data

by LP DAAC - kyrad » Tue Dec 30, 2025 4:11 pm America/New_York

Hi @martinkeller,

I suggest running our Introduction to NASA earthaccesshttps://github.com/nasa/LPDAAC-Data-Resources/blob/main/python/tutorials/earthaccess_introduction.ipynb tutorial in our Github. This tutorial allows you to search temporally and spatially and has the option for bulk downloading or direct access from CMR. This tutorial searches our data collections using keywords and lets you put specific parameters in place for the best result. If you continue to have issues, please let us know.

Thank you!

martinkeller
Posts: 11
Joined: Tue Jul 30, 2024 5:33 am America/New_York
Answers: 0

Re: Missing tiles for historical MODIS data

by martinkeller » Mon Jan 05, 2026 4:34 am America/New_York

This notebook is in fact the basis for the code I posted earlier. The tiles listed for the date range discussed earlier are still incomplete while later date ranges show up as complete, which leads me to suspect that the issue I'm encountering might be related to a backend service used by the EarthAccess Python library.

LP DAAC - dgolon
User Services
User Services
Posts: 201
Joined: Tue Dec 03, 2024 2:37 pm America/New_York
Answers: 0
Endorsed: 2 times

Re: Missing tiles for historical MODIS data

by LP DAAC - dgolon » Tue Jan 06, 2026 9:03 am America/New_York

Hi @martinkeller we're looking deeper into what you are seeing. Thanks for reporting it.
Subscribe to the LP DAAC listserv by sending a blank email to lpdaac-join@lists.nasa.gov.

Sign up for the Landsat listserv to receive the most up to date information about Landsat data: https://public.govdelivery.com/accounts/USDOIGS/subscriber/new#tab1.

LP - erik.bolch
Subject Matter Expert
Subject Matter Expert
Posts: 5
Joined: Mon Jun 13, 2022 10:26 am America/New_York
Answers: 3
Endorsed: 3 times

Re: Missing tiles for historical MODIS data

by LP - erik.bolch » Wed Jan 07, 2026 9:43 am America/New_York

Hi @martinkeller, I took at look at your issue and was able to replicate the missing tiles with the script you provided. Upon closer inspection, the issue has to do with the way the links are being extracted from the search results. For MOD13Q1, the granules have multiple 'data links'. This is always possible with data, one example being Harmonized Landsat-Sentinel, but in this case they are actually browse and .xml files that are incorrectly labelled in the metadata. When earthaccess retrieves the data links its also grabbing these. The subsetting with link = result.data_links()[0] grabs the first in the list, which can sometimes be a browse image. Since the browse images have a different naming convention the script is only returning a few tiles rather than all of them, even though you're showing the correct amount of results (882). I created an example notebook for retrieving the links that also has some more explanation.

I think initially if you were using earthaccess.download() to retrieve data, the likely culprit of missing tiles was the temporary CMR search outage in early December. That download function should download all of the data including the incorrectly tagged browse images.

As for MYD13Q1, the metadata is correct and it only has 1 link returned by data_links(), so this issue should not show up there.

martinkeller
Posts: 11
Joined: Tue Jul 30, 2024 5:33 am America/New_York
Answers: 0

Re: Missing tiles for historical MODIS data

by martinkeller » Wed Jan 07, 2026 11:27 am America/New_York

Hi Erik,

Many thanks for your detailed answer! I adjusted my code based on the notebook you shared and tried downloading MODIS data for the previously problematic date range. I'm happy to confirm that with the changes to the code everything worked just fine!

Best regards,

Martin Keller

Post Reply