Tutorial

How to Convert Satellite Data to CSV (Step by Step)

Published July 13, 2026 · 11 min read · By Earth Analytics

Satellite data arrives as rasters — GeoTIFF images or NetCDF grids — but most analysis happens in spreadsheets, Python dataframes, or BI tools. The bridge between the two is extraction: sampling raster values at your locations and writing them to CSV. Here are the three most practical ways to do it, from no-code to fully automated.

What a good satellite CSV looks like

Before the how, the what. A clean, analysis-ready satellite CSV has:

site_idlatlondatendvicloud_pct
field_0148.13711.5752026-06-010.723
field_0148.13711.5752026-06-060.740
field_0248.20111.4422026-06-010.5812

Method 1: QGIS (no code)

Good for one-off extractions from a handful of files.

  1. Load your GeoTIFF and your points layer (a CSV with lat/lon imports directly via Layer → Add Delimited Text Layer).
  2. Check both layers use the same CRS — reproject if not. This is the #1 source of silent errors.
  3. Run Processing → Toolbox → Sample raster values.
  4. Export the result: right-click the layer → Export → Save Features As → CSV.

Limitation: this doesn't scale. Fifty dates means fifty rasters and fifty manual runs.

Method 2: Python with rasterio / xarray

The standard automated approach. For a GeoTIFF and a list of points:

import rasterio, open the file with rasterio.open(), and use src.sample(coords) to pull values at your coordinates — then write rows out with pandas' to_csv(). For NetCDF time series (ERA5, CHIRPS), xarray is better: ds.sel(lat=y, lon=x, method="nearest") gives you a full time series per point in one line, and ds.to_dataframe().to_csv() finishes the job.

Things the simple version ignores, and a production pipeline must not:

Method 3: Google Earth Engine (no downloads at all)

Earth Engine hosts the full Sentinel, Landsat, and MODIS archives in the cloud. You upload your points, map a reducer over an image collection, and export straight to CSV — no gigabytes ever touch your disk. The core pattern is ImageCollection.map() with reduceRegions(), then Export.table.toDrive(). For long time series over many points, this is by far the fastest route, and it's free for non-commercial use.

Which method should you pick?

SituationBest method
One raster, a few points, no codingQGIS
Local files, repeatable pipelinePython (rasterio/xarray)
Long time series, many locationsGoogle Earth Engine
No time to build any of thisHave it done for you ↓

Want the CSV without the pipeline? We convert satellite data to analysis-ready CSVs every day — cloud-masked, quality-flagged, and documented. Request your data →

Related guides