> For the complete documentation index, see [llms.txt](https://help.felt.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://help.felt.com/upload-anything/files/spreadsheets-and-geocoding.md).

# Spreadsheets and geocoding

Map CSV and Excel data by address, latitude and longitude, or region. Learn when to use geocoding, geomatching, or a join.

Felt places spreadsheet rows on the map by address, coordinates, or region name or code. Upload a CSV, Excel, or Numbers file with [Upload Anything](/upload-anything/files.md), or paste a [Google Sheets](/upload-anything/urls/google-sheets.md) link. An `address` column is enough to geocode each row as a point. If Felt can't find a location column, it adds the spreadsheet as a table, and you can [choose the location columns](#change-the-location-columns).

## Attach spreadsheet data to places

Felt chooses a method based on your spreadsheet's columns.

| Your spreadsheet has                                                            | Example                                                             | Felt creates                                                       | Method                                                    |
| ------------------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------ | --------------------------------------------------------- |
| Street addresses                                                                | `123 Main St, Denver, CO`                                           | Points                                                             | [Geocoding](#geocoding)                                   |
| Latitude and longitude                                                          | `40.7128`, `-74.0060`                                               | Points                                                             | [Coordinates](#coordinates)                               |
| Region names or codes                                                           | `Germany`, `California`, ZIP code `90210`, county FIPS code `06037` | The regions' polygons                                              | [Geomatching](#geomatching)                               |
| Geometry as text                                                                | `POINT(-122 37)`                                                    | Points, lines, or polygons                                         | [Geometries](#geometries)                                 |
| H3 cell indexes                                                                 | `8928308280fffff`                                                   | Hexagons                                                           | [H3 geomatching](#h3-geomatching)                         |
| IDs or names that match your own layer, such as parcel IDs or sales territories | `P-10442`                                                           | A new layer with your layer's shapes and the spreadsheet's columns | [Join](/analysis-and-dashboards/spatial-analysis.md#join) |

For standard regions, such as counties and ZIP codes, geomatching supplies the boundaries. For your own boundaries, upload the spreadsheet and join it to your layer on a shared column. A join copies data once; it doesn't update when the source spreadsheet or Google Sheet changes. See [Join](/analysis-and-dashboards/spatial-analysis.md#join).

## Prepare your spreadsheet

A spreadsheet doesn't need a template: a header row plus `latitude` and `longitude` columns, or an `address` column, is enough.

* Use one header row, and one row per place or feature.
* Remove merged cells and formulas.
* Store codes such as ZIP codes and FIPS codes as text, so they keep their leading zeros.

Each tab of an Excel workbook becomes its own layer. For file formats, see [Supported file types](/upload-anything/files/supported-file-types.md#spreadsheets).

## Geocoding

Geocoding converts addresses into points. Felt geocodes addresses worldwide at no extra charge, up to 10,000 rows per file. A larger file uploads as a table: split it, or add latitude and longitude columns. See [Data limits](/upload-anything/data-limits.md).

Felt reads a full address from one column or combines its parts from these columns:

| Part                    | Column names                                         |
| ----------------------- | ---------------------------------------------------- |
| Full address            | `address`, or a name that contains "address"         |
| Street and house number | `street`, `addr`, `address`                          |
| City                    | `city`, `town`, `locality`                           |
| State or province       | `state`, `province`, `region`, `territory`           |
| Postal code             | `zip`, `zipcode`, `postal`, `postalcode`, `postcode` |
| Country                 | `country`                                            |

{% hint style="warning" %}
Avoid two similar column names for one address part, such as `State` and `State Reporting`, because Felt might use the wrong one. Rename the extra column, or choose the columns in [Geometry settings](#change-the-location-columns).
{% endhint %}

Include the city and country in the address or in separate columns, especially outside the US. Without them, Felt can match a street to one with the same name elsewhere. Felt recognizes US and UK postal codes on their own. For other postal codes, such as Canadian or Indian ones, include a city and country.

{% embed url="<https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmRfGitkyjOEMvVsEyGWN%2Fuploads%2FTTzHGDG7GEVumNlNN6qN%2FScreen%20Recording%202025-02-27%20at%207.56.28%E2%80%AFPM.mp4?alt=media&token=306ee53b-52be-40e3-95fb-ccd12a935ba7>" %}

### Review geocoding results

After geocoding, the layer shows *Found geometry in N% of rows.* To see which rows matched:

1. Select the layer in the legend, and then click **Open table** in the toolbar.
2. In the **Found** column header, click the report icon (**See full report…**). The report lists each row's match.

To fix rows that weren't found or are misplaced, correct the addresses in your source file and use **Upload new version** on the layer. See [Refresh data](/upload-anything/refresh-data.md). Editing an address in Felt's table doesn't geocode the row again, but you can [move the point](/layers/edit-features.md) by hand.

<figure><img src="https://217108486-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmRfGitkyjOEMvVsEyGWN%2Fuploads%2Fgit-blob-c7cdec1355f8a16fab7a1526d93afb00de6cff50%2Fgeocoding-report.webp?alt=media" alt="Geocoding results dialog for School sites with 103 full matches and 0 that didn&#x27;t match, over the table with a check mark in each row&#x27;s Found column."><figcaption></figcaption></figure>

## Coordinates

Coordinates are the most reliable way to place points. Felt finds columns named `latitude` and `longitude`, `lat` and `lon`, `lat` and `lng`, `lat` and `long`, or `y` and `x`, or names such as `site_lat`.

* Values can be decimal degrees (`40.7128`) or degrees, minutes, and seconds (`51°30'28.5"N`).
* Latitude and longitude can be in two columns, or in one column (`40.7128, -74.0060`).
* Felt doesn't read projected coordinates, such as UTM, in spreadsheets. Convert them, or upload a GeoPackage or Shapefile with its projection.

## Geometries

A geometry column holds whole points, lines, or polygons as text. Felt looks for columns named `wkt`, `wkb`, `geojson`, `geometry`, `the_geom`, `geom`, `geography`, `geo`, `shape`, or `location`. Values can be Well-Known Text (WKT), such as `POINT(-122 37)`, hex-encoded Well-Known Binary (WKB), or GeoJSON geometry objects.

## Geomatching

Geomatching attaches a region's boundary to each row that contains the region's name or code. Felt uses a column when at least 70% of its values match one of these region types. When several columns match, Felt prefers a column named with a hint, such as `zip` or `county`, ignoring capitalization: `County` and `County name` both match `county`.

| Region                         | Geometry settings name | Example values                   | Column name hints                                                   |
| ------------------------------ | ---------------------- | -------------------------------- | ------------------------------------------------------------------- |
| Countries                      | Countries              | `Germany`, `US`, `DEU`           | `country`, `nation`, `adm0`, `admin0`, `admin-0`                    |
| States and provinces worldwide | Regions                | `California`, `Ontario`, `DE-BY` | `state`, `province`, `adm1`, `admin1`, `admin-1`                    |
| Time zones                     | Timezones              | `America/New_York`               | `tz`, `tzinfo`, `timezone`, `time zone`                             |
| EU statistical units           | NUTS 1, NUTS 2, NUTS 3 | `DE1`, `DE21`, `DE212`           | `state`, `province`, `region`, `nuts`                               |
| EU local administrative units  | LAUs                   | `München`, `DE_09162000`         | `municipality`, `municipio`, `commune`, `comune`, `gemeinde`, `lau` |
| US states                      | States                 | `California`, `CA`, `06`         | `state`, `fips`                                                     |
| US counties                    | Counties               | `06037`                          | `county`, `fips`                                                    |
| US metro areas (CBSAs)         | CBSAs                  | `35620`                          | `cbsa`                                                              |
| US ZIP codes                   | Zip codes              | `90210`, `02134`                 | `zip`, `zipcode`, `zcta`, `postcode`                                |
| US census tracts               | Tracts                 | `06037101110`                    | `tract`, `fips`                                                     |
| US census block groups         | Block groups           | `060371011101`                   | `block_group`, `block-group`, `bg`, `blockgrp`, `fips`              |
| Australian postcodes           | Australian postcodes   | `2060`                           | `postal_code`, `postal_area`                                        |

Codes must keep their full length: US FIPS codes have 2 digits for states, 5 for counties, 11 for tracts, and 12 for block groups. ZIP codes have 5 digits; remove the suffix from ZIP+4 codes.

{% embed url="<https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmRfGitkyjOEMvVsEyGWN%2Fuploads%2Fgx43dWfkKecX5GeUO9sf%2FScreen%20Recording%202025-02-27%20at%207.25.09%E2%80%AFPM.mp4?alt=media&token=9852f4bd-d6dd-4f16-bd25-3326996c4b21>" %}

### Rows that share a place

Geomatching attaches a boundary to at most five rows that share the same value, and later rows stay unmatched. Summarize the spreadsheet to one row per place using a count or sum, or add addresses or coordinates so each row becomes its own point.

### H3 geomatching

{% hint style="success" %}
Available on the Business and Enterprise plans. [Compare plans](https://felt.com/pricing#compare)
{% endhint %}

H3 is a global grid of hexagonal cells. Each row's H3 cell index identifies the hexagon Felt draws. The index can be a hexadecimal string or an integer. Name the column clearly, such as `h3`, and use one resolution for the whole column. If Felt doesn't detect the column, select **H3** in [Geometry settings](#change-the-location-columns).

## Change the location columns

Changing the location columns needs Edit access to the map. Use Geometry settings when your spreadsheet appears as a table or Felt picks the wrong location column.

1. Select the layer in the legend, and then click **Open table** in the toolbar.
2. In the table, open the **···** menu and click **Geometry settings**.
3. In **Geometry type**, select how to place rows, such as **Coordinates**, **Addresses**, **Geometries (WKT/WKB)**, **Zip codes**, or **H3**.
4. Select the columns to use.
5. Click **Update spreadsheet**. Felt reprocesses the layer and places the rows.

Felt uses a column you choose even when fewer than 70% of its values match. For upload errors, see [Troubleshooting uploads](/upload-anything/files/troubleshooting-uploads.md).


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://help.felt.com/upload-anything/files/spreadsheets-and-geocoding.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
