# Welcome

Find guides, best practices, and tips to maximize your Felt experience.

Welcome to Felt's Help Center! Here you'll find step-by-step guides, best practices, and troubleshooting tips to help you make the most of Felt. Use the search bar at the top or the table of contents to your left to quickly find answers to your questions.

## Getting started

<table data-view="cards"><thead><tr><th></th><th data-hidden data-card-cover data-type="files"></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><strong>What is Felt?</strong><br>New to Felt? Start here to learn more.</td><td><a href="/files/nTaxq9M0tBtpug2Meyie">/files/nTaxq9M0tBtpug2Meyie</a></td><td><a href="/pages/95qu6VLAw2wXimHWxgwv">/pages/95qu6VLAw2wXimHWxgwv</a></td></tr><tr><td><strong>Create your first map</strong><br>Get familiar with the essentials - uploading data, styling layers, and collaborating with others.</td><td><a href="/files/9CONQZYdDnanYzrPu4oV">/files/9CONQZYdDnanYzrPu4oV</a></td><td><a href="/pages/FVsPMOp3773kFX1mkkNp">/pages/FVsPMOp3773kFX1mkkNp</a></td></tr><tr><td><strong>Tour the interface</strong><br>Check out the delightful features that make mapping effortless.</td><td><a href="/files/tu7Lglxn2LZkSMhZPG0c">/files/tu7Lglxn2LZkSMhZPG0c</a></td><td><a href="/pages/0KZ1ejDdxlvKANRtlCHU">/pages/0KZ1ejDdxlvKANRtlCHU</a></td></tr></tbody></table>

## Discover Felt

<table data-view="cards"><thead><tr><th></th><th data-hidden data-card-cover data-type="image">Cover image</th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><p><strong>Upload Anything</strong></p><p>Add any data to your map no matter the format.</p></td><td><a href="/files/knU1yMEPuUbRep4u0cbf">/files/knU1yMEPuUbRep4u0cbf</a></td><td><a href="/pages/w2OsILMFhwK3Dsl2QyXm">/pages/w2OsILMFhwK3Dsl2QyXm</a></td></tr><tr><td><strong>Layers</strong><br>Explore, style, and analyze your uploaded data.</td><td><a href="/files/4jPF4Z7PKZXb2HJrX2Qi">/files/4jPF4Z7PKZXb2HJrX2Qi</a></td><td><a href="/pages/Ho90xz7OuMfFzwB2A71L">/pages/Ho90xz7OuMfFzwB2A71L</a></td></tr><tr><td><strong>Felt AI</strong><br>Build spatial applications with just a prompt.</td><td data-object-fit="cover"><a href="/files/oAA1BFuCcwB62Vo5Mw5V">/files/oAA1BFuCcwB62Vo5Mw5V</a></td><td><a href="/pages/L9x1zNbhAnqeVKOlFITx">/pages/L9x1zNbhAnqeVKOlFITx</a></td></tr><tr><td><strong>Field App</strong><br>Felt’s native mobile app for iOS and Android.</td><td data-object-fit="cover"><a href="/files/KxUrSHefnPRrVFVKU7pR">/files/KxUrSHefnPRrVFVKU7pR</a></td><td><a href="/pages/4SZalyfgPYAVyLPoMzw0">/pages/4SZalyfgPYAVyLPoMzw0</a></td></tr><tr><td><strong>Dashboards &#x26; Apps</strong><br>Build dashboards and apps that respond to user interactions.</td><td><a href="/files/UFlc3PXNB9m8ougRJA6j">/files/UFlc3PXNB9m8ougRJA6j</a></td><td><a href="/pages/03I8onDKmaA2JNkgpEuz">/pages/03I8onDKmaA2JNkgpEuz</a></td></tr><tr><td><strong>Annotations</strong><br>Draw annotations on your map for added context.</td><td><a href="/files/3haws69EvYXfHbFMnzYt">/files/3haws69EvYXfHbFMnzYt</a></td><td><a href="/pages/yGwvS2wsVXGjSA0Z3gfp">/pages/yGwvS2wsVXGjSA0Z3gfp</a></td></tr><tr><td><strong>Sharing &#x26; Collaboration</strong><br>Create maps together in real-time then share anywhere.</td><td><a href="/files/DcAOds6w8Wk12UhVMxAq">/files/DcAOds6w8Wk12UhVMxAq</a></td><td><a href="/pages/vAlISo3Z0Tu7wT3vlezq">/pages/vAlISo3Z0Tu7wT3vlezq</a></td></tr><tr><td><strong>Administration</strong><br>Manage users, workspaces, security and billing.</td><td><a href="/files/q1V2VUPBBVVOX5xcSSkf">/files/q1V2VUPBBVVOX5xcSSkf</a></td><td><a href="/pages/QtXLw9CkINW12REFsqCz">/pages/QtXLw9CkINW12REFsqCz</a></td></tr><tr><td><strong>For Developers</strong><br>Build with Felt's APIs and SDKs.</td><td><a href="/files/uSSKJ8s2L42phshiKbuF">/files/uSSKJ8s2L42phshiKbuF</a></td><td><a href="https://developers.felt.com/">https://developers.felt.com/</a></td></tr></tbody></table>

## More resources

{% hint style="info" %}
Need more help? Contact our team at <support@felt.com>.
{% endhint %}

<table data-header-hidden><thead><tr><th width="219"></th><th></th></tr></thead><tbody><tr><td><a href="https://www.youtube.com/@feltmaps/videos"><strong>YouTube</strong></a></td><td>Watch tutorials, feature showcases, and detailed walkthroughs to master Felt.</td></tr><tr><td><a href="https://felt.com/blog"><strong>Blog</strong></a></td><td>Stay up-to-date with the latest Felt features and use cases.</td></tr><tr><td><a href="https://felt.com/gallery"><strong>Gallery</strong></a></td><td>Explore a collection of inspiring maps created by our community.</td></tr><tr><td><a href="https://felt.com/blog/building-a-modern-gis-stack-webinar-series"><strong>Webinars</strong></a></td><td>Dive into expert-led training on mapping techniques and product features.</td></tr><tr><td><a href="https://felt.com/customers"><strong>Customer stories</strong></a></td><td>Discover how organizations are solving real-world challenges using Felt.</td></tr><tr><td><a href="https://gisfundamentals.felt.com/"><strong>Fundamentals of GIS</strong></a></td><td>A comprehensive set of resources to teach GIS with Felt.</td></tr></tbody></table>


# What is Felt?

Discover Felt's collaborative platform for creating and sharing interactive maps.

{% embed url="<https://40056855.fs1.hubspotusercontent-na1.net/hubfs/40056855/WhatisFelt_HelpCenter.mp4>" %}

Felt is a cloud-native GIS platform that lets you create maps, apps, and dashboards in seconds. Whether you're working in urban planning, environmental science, real estate, or logistics, Felt empowers your entire organization with spatial superpowers.

## Key features

[**Upload Anything**](/upload-anything/files)

Work with virtually any spatial data format. Upload files and spreadsheets, add data from URLs, connect cloud sources, or send layers directly from QGIS. Felt handles both raster and vector data, automatically geocodes and boundary matches, and supports scheduled refreshes to keep your data up-to-date.

[**Layers**](/layers/table-view)

When data is added to Felt, it becomes a layer that you can style, edit, and analyze. View and filter the underlying data table, perform spatial analysis, apply custom styling, and configure informative popups to create rich, multi-dimensional maps.

[**Dashboards & Apps**](/dashboards-and-apps/components)

Transform maps into interactive experiences that respond to user interaction with Components like charts, time sliders, and data tables. Developers can extend this functionality using the Felt API or SDK.

[**Felt AI**](/felt-ai/ai-assistant)

Felt AI combines cutting-edge LLM technology with specialized training on Felt's platform. Because it understands geographic relationships and mapping workflows, it helps you instantly [build map-based applications](/developer-platform/extensions), [create polished popups](/developer-platform/custom-popups), and write [custom SQL queries](/data-sources/cloud-sources/sql-queries) without lengthy development cycles.

[**Field App**](/field-app/getting-started)

Felt's mobile app is built for seamless data collection workflows on mobile devices. Whether you're collecting data in the field, monitoring live operations, or reviewing dashboards between meetings, the Field App connects you to your maps with real-time syncing across devices. Available on [iOS](https://apps.apple.com/us/app/felt-maps-field-surveys-gis/id6754033379) and [Android](https://play.google.com/store/apps/details?id=com.felt.mobile).

[**Sharing & Collaboration**](/sharing-and-collaboration/sharing-a-map)

Work together in real-time with multiple editors, add comments directly on maps, and control access with customizable permissions. Share your maps via links, embed them in websites and applications, or integrate with tools like Notion and PowerBI.

[**Spatial analysis**](/layers/spatial-analysis)

Manipulate and analyze geographic data to extract meaningful insights. Combine layers, identify patterns, and discover spatial relationships to make informed decisions.

## Learn more

<table data-header-hidden><thead><tr><th width="219"></th><th></th></tr></thead><tbody><tr><td><a href="https://www.youtube.com/@feltmaps/videos"><strong>YouTube</strong></a></td><td>Watch tutorials, feature showcases, and detailed walkthroughs to master Felt.</td></tr><tr><td><a href="https://felt.com/blog"><strong>Blog</strong></a></td><td>Stay up-to-date with the latest Felt features and use cases.</td></tr><tr><td><a href="https://felt.com/gallery"><strong>Gallery</strong></a></td><td>Explore a collection of inspiring maps created by our community.</td></tr><tr><td><a href="https://felt.com/blog/building-a-modern-gis-stack-webinar-series"><strong>Webinars</strong></a></td><td>Dive into expert-led training on mapping techniques and product features.</td></tr><tr><td><a href="https://felt.com/customers"><strong>Customer stories</strong></a></td><td>Discover how organizations are solving real-world challenges using Felt.</td></tr><tr><td><a href="https://gisfundamentals.felt.com/"><strong>Fundamentals of GIS</strong></a></td><td>A comprehensive set of resources to teach GIS with Felt.</td></tr></tbody></table>


# Create your first map

Build your first interactive Felt map.

{% embed url="<https://40056855.fs1.hubspotusercontent-na1.net/hubfs/40056855/GettingStartedin30_HelpCenter.mp4>" %}

Build your first interactive map in just minutes. Explore our step-by-step videos covering how to upload your data, style it effectively, and share your completed maps with others.

{% hint style="info" %}
Want to follow along? Use a dataset of your own or this [demo dataset](https://docs.google.com/spreadsheets/d/1EQUL2YO8efOjONfFYIVO1Y3W6HgzYJF58u0kDsW0CHw/edit?gid=0#gid=0) of store revenue across the US.
{% endhint %}

### Step 1: Uploading your data

{% embed url="<https://40056855.fs1.hubspotusercontent-na1.net/hubfs/40056855/UploadData_HelpCenter.mp4>" %}

Felt's [Upload Anything](/upload-anything/files) feature lets you add geographic data in various formats from multiple sources.

To get started, click ![](/files/LykIpn1aK77DZiwFt60G) Upload Anything in the toolbar and choose your preferred method - direct file upload, adding from a URL, or Enterprise options like cloud sources. Felt automatically identifies spatial information in your data and places it on the map without requiring technical expertise.

After uploading, interact with your data by double-clicking the layer in the legend to center your view and open the style editor. Click the ![](/files/0kvyY6RmHLm6leFaE7Kv) [View table](/layers/table-view) button to see your data in a familiar spreadsheet format. To narrow specific information, [filter](/layers/filters) your data by either right-clicking on a column to add a filter or use the Filter tab in the style editor to set conditions (like "Revenue greater than 95,000") and watch the map update immediately to display only the relevant data points, allowing you to focus on specific information.

### Step 2: Styling your data

{% embed url="<https://40056855.fs1.hubspotusercontent-na1.net/hubfs/40056855/StyleData_HelpCenter.mp4>" %}

The [style editor](/layers/styling) in Felt allows you to transform raw data into customized visualizations.

Access the style editor by selecting a data layer in the [legend](/getting-started/tour-the-interface). In the General section, choose from [visualization types](/layers/styling/vector-layers) including Simple, Categories, Color range, Size range, Heatmap and H3. The options in the style editor adapt to your selected visualization type, with the legend updating automatically as you make your selections.

Beyond basic settings, customize further in the Legend section by adjusting text and captions. Use [Interactions](/layers/popup-interactions) to control what viewers see when moving their cursor over features in your layer, from simple popups to embedded iframes or custom HTML. For advanced viewer interactions, the [Components](/dashboards-and-apps/components) section lets you build custom dashboards with charts and statistics that enhance data presentation and interactivity.

### Step 3: Easily share your maps

{% embed url="<https://40056855.fs1.hubspotusercontent-na1.net/hubfs/40056855/Share_HelpCenter.mp4>" %}

Felt offers flexible options for [sharing maps](/sharing-and-collaboration/sharing-a-map) while keeping your data secure.

At the map level, click the Share button to set permissions (View, Contribute, or Edit). For private sharing, set access to **Only people and teams invited**, add specific emails, and give them View access to see the map or Edit access to make changes (posting comments requires a Full Access seat). Once shared, you can collaborate in real time, exchange feedback through ![](/files/cbJNsm3mWArykiaICQ4C)[comments](/sharing-and-collaboration/commenting), and tag teammates to start conversations directly on the map.

For broader collaboration, use [workspace and project](/administration/workspaces-and-projects) level sharing. Add [members](/administration/managing-members) to your workspace by selecting **Invite members** and setting appropriate permissions. Projects help organize subsets of maps within your workspace - making them private allows you to control access without exposing your entire workspace, perfect for client work or team-specific content. Enterprise users can also brand and [embed](/sharing-and-collaboration/embedding) their maps in internal portals or dashboards using authenticated tokens for [security](/administration/security-and-privacy), combining geographic data with business insights for better decision-making.


# Tour the interface

Explore Felt's user interface with this guided tour of essential mapping tools and features.

{% embed url="<https://40056855.fs1.hubspotusercontent-na1.net/hubfs/40056855/TourInterface_HelpCenter.mp4>" %}

## Interface

Explore the main parts of Felt’s interface to help you get started.

<figure><img src="/files/pZnrRujNxwW76DhI7sPO" alt=""><figcaption></figcaption></figure>

There are five main parts of a Felt map: the toolbar, legend, detail panel, table, and map.

### Toolbar

<figure><img src="/files/izKidQ7ody2BhocbMnDQ" alt=""><figcaption></figcaption></figure>

The toolbar contains important [tools](#tools) for creating your map.

* The middle of the toolbar contains a set of tools used to create, browse, and display data on your map.
* The left side of the toolbar lets you rename and move your map. Use the **Felt** menu to access more functions, actions, and settings.
* The right side of the toolbar provides an easy way to switch between the editor and viewer experience. Use the [Share](/sharing-and-collaboration/sharing-a-map) button to configure map sharing settings. You can add [comments](/sharing-and-collaboration/commenting) or [search](#navigation-and-search) the map, configure your [basemap](/layers/basemaps), and see who else in your [workspace](/getting-started/your-workspace) is on the map with you.

### Legend

<figure><img src="/files/OuBnXNCIRxczCK9PH36N" alt=""><figcaption></figcaption></figure>

The legend provides access to all the parts of your map.

* Use the **Legend** tab to preview how viewers will experience your map. By default, all layers added to the map are added to the legend.
* Use the **List** tab to view and edit all parts of your map: components, annotations, layers and basemaps are listed in the List tab. This tab is only visible to editors when editing a map.

### Detail panel

<figure><img src="/files/HZxnGqBx3Y3jh6AMZyrn" alt=""><figcaption></figcaption></figure>

The detail panel is where you can see and edit details about your map. The detail panel is hidden by default, but opens once you select something to configure, either by clicking it on the map or clicking it from the legend. Modify [annotation](/annotations/annotations) or [layer](/layers/basemaps) properties, configure how your [dashboard components](/dashboards-and-apps/components) behave, and more.

### Table

<figure><img src="/files/uqeNRK51HH8hi8AjoiDp" alt=""><figcaption></figcaption></figure>

The [table](/layers/table-view) shows the attribute table for vector layers in a tabular format, and provides useful controls like sorting, searching, [filtering](/layers/filters), and formatting. To open the table, click the ![](/files/0kvyY6RmHLm6leFaE7Kv) from the top-right of the toolbar, or use the keyboard shortcut **Shift 4**. You can configure if and how the table is shown to map viewers from within [Map settings](/dashboards-and-apps/map-settings).

### Map

Underneath Felt’s interface is the map that you’re building. Here are some quick tips to navigate the map:

* To pan the map, click and drag.
* To zoom in and out, use your mouse’s scroll wheel. You can also use the **+** and **–** buttons on your keyboard, or the **+** and **–** buttons in the bottom right corner of the map.
* To quickly zoom to something on your map, double-click it from the Legend or List. You can also use the **F** key to zoom to a selected layer or annotation.
* Right-clicking on the map provides you with controls for that specific place in the world. Add a comment, copy the coordinates, or open the location in another tool.
* Press **Cmd .** (Mac) / **Ctrl .** (Windows) to hide Felt’s interface and see your map in full screen.
* To rotate the map, right-click and drag, or use two fingers on a trackpad. You can also press **Shift** and the **←** / **→** arrow keys to rotate in 15° steps. A compass ![](/files/zXVzx0a92lk5yae62lrB) appears in the bottom right corner once you’ve rotated – click it or press **Shift ↑** to snap back to north. Your current rotation is saved in the map’s share link.

## Viewing and editing

<figure><img src="/files/KyMwg9lSuPktwyGuexRQ" alt=""><figcaption></figcaption></figure>

As an editor, there are two ways to view a map. By default, maps open into a safe mode that reflects how others will see and interact with your map. Changes made in this mode won’t be saved.

To make edits to the map, click the **Edit map** button in the toolbar or use the keyboard shortcut **Shift E**. Map edits are saved automatically as you go.

## Tools

<figure><img src="/files/G2FwGDOf8t2lfFjmMCAE" alt=""><figcaption></figcaption></figure>

The set of tools in the middle of the [toolbar](#toolbar) are the essentials for creating maps in Felt.

### <img src="/files/WhGKWWlZJFSJktSA0g5A" alt="" data-size="line">Add

The Add tool gives you access to a variety of options for creating annotations and editing data on your map.

#### Annotation tools

When the toolbar shows the pencil icon ![](/files/SJtCf8Zc7YTMdwMFqcOz) , selecting it allows you to add these annotations to the map.

<figure><img src="/files/i5iPFGiSscxgf2Fje3vP" alt="" width="375"><figcaption></figcaption></figure>

* ![](/files/NXK2Iy2oSvx174qEyIWr) **Pin:** Add location markers to your map. Customize pin style, add images, and include information fields through the detail panel.
* ![](/files/RYj4KuE1ohUIhfkNd9GZ) **Line:** Create linear features on your map. Add and adjust vertices after creation, and extend lines by clicking on the last point.
* ![](/files/iXio2OoUbsQSzhkwvZyR) **Route:** Create the best path between points based on your chosen transportation method (driving, cycling, walking, or flying). Hold `Shift` to override automatic routing.
* ![](/files/ZokHgMSuxeZ83bZ5aY3c) **Polygon:** Draw enclosed shapes to define areas. View area measurements with a single click and edit vertices after creation.
* ![](/files/qGdTVeY4BDX3LUXnTRNd) **Rectangle:** Draw rectangles with three clicks. Mark the start point, width, and length.
* ![](/files/4xPKJuISwMN61qnxNOUR) **Circle:** Create circular areas by clicking on the center point and dragging outward. Specify the radius in your preferred unit of measurement.
* ![](/files/kgWWOJRHPObFPeCQAOvJ) **Marker**: Create free-form arrows and markings to highlight important areas. Easily duplicate and reposition to indicate patterns or directions.
* ![](/files/Nw8yDJjuiXQhwvJOsUG0) **Highlighter**: Add semi-transparent markings that allow the basemap to show through. Perfect for subtle emphasis while maintaining visibility of underlying features.
* ![](/files/xvnn4H6eZIVHlTTCi57h) **Text**: Add labels and descriptions anywhere on your map. Adjust size, color, and rotation to fit your design needs.
* ![](/files/0Fcre0aD6QY8v05fndUC) **Note**: Create text boxes to explain features or provide context. Ideal for collaborative workflows and adding detailed information.
* ![](/files/R4DjqdHY5WuSoWhBf5JQ) **Link**: Embed URLs directly on your map. Shows preview thumbnails that can be toggled on or off.
* ![](/files/RPvCy6Nu9vTwF2dC7oM6) **Video**: Integrate media directly into your map. YouTube links display with full video previews for rich multimedia maps.
* ![](/files/vKqAJbgA6ji6gThGfNmO) **Extract**: Quickly turn administrative areas or building footprints at your current zoom level into new polygon annotations.

Learn more about [annotations](/annotations/annotations).

#### Layer editing

You can add features to existing layers on the map. To add to a layer on the map, first select the dropdown caret next to the pencil icon <img src="/files/cuSzERrmS58CwsVCOv7L" alt="" data-size="line">. Below **Annotations**, layers on the map will appear in the dropdown list. Selecting a layer from this menu allows you to add a feature to that layer.

<figure><img src="/files/VkSzGysvLNiigd4M2CR8" alt="" width="215"><figcaption></figcaption></figure>

Felt saves the last layer you edited in the toolbar—you will see the pencil icon has the layer's color on it <img src="/files/f6ye6W5kQQMhAo592YFB" alt="" data-size="line">. You can continue adding features to the existing layer by selecting the pencil icon directly.

<figure><img src="/files/Up5HJ7rOCUvkz0Jpcd8Z" alt="" width="141"><figcaption></figcaption></figure>

Learn more about [editing data](/layers/editing-layers).

### ![](/files/qv8POfyKJ00VfTgugMR2) Data sources

Search across all of your workspace's data sources — Felt Servers, the Global Library, Cloud sources, and Raster infrastructure — and add any layer to the current map.

Learn more in [Data sources](/data-sources/data-sources).

### ![](/files/LykIpn1aK77DZiwFt60G) Upload Anything

Upload any file to Felt and Felt will do all the hard work to visualize it for you.

Learn more about [Upload Anything](/upload-anything/files).

### ![](/files/Fyd9uldsRFuFDMCAtwkN) Analysis

Access spatial analysis operations like buffer, intersect, union, and more.

Learn more about [spatial analysis.](/layers/spatial-analysis)

### ![](/files/XD642ZaLQ4Qj0zOmSrtc) Dashboards

Add interactive charts and filters so viewers can explore the data within your map.

Learn more about [dashboards](/dashboards-and-apps/components).

### ![](/files/BHpadoUiULoA8m5mCqRJ) Developer Platform

Configure map-level extensions to turn any Felt map into a custom spatial application. Use AI to extend Felt's [JS SDK](https://developers.felt.com/js-sdk/examples#extensions) and build unique mapping applications using Felt's premium UI components (buttons, panels, filters)—all without writing code.

Learn more about [the Developer Platform](/developer-platform/extensions).

### ![](/files/3O2sCfZkqCMak4bWIkKe) Map settings

Control viewer experience by setting map constraints, defining data table visibility, and managing permissions for map duplication and data export.

Learn more about [map settings](/dashboards-and-apps/map-settings).

## Navigation & search

### Pan & zoom

* To pan, select the map and move your mouse at the same time.
* To pan while an object is in editing mode, press space bar and then pan the map.
* To zoom, use the `+`/`-` buttons at the bottom right corner of the screen, or use your track pad or mouse scroll wheel. You can also double click the map to zoom in.
* To locate yourself use the ![](/files/NvlZETRn3V2SGPWJAIb7)in the bottom right corner of the screen.

### Searching for places

* The ![](/files/OYjfRGQ2CbmSfswRn4Sg)Search tool on the right side of the top toolbar returns two kinds of results:
  * Places on the map (indicated by a globe icon)
  * Features inside data layers (indicated by point, line and polygon icons)
* When editors search for places on the map, a pin is placed at that location. For logged-in and anonymous viewers, no pin is added, but a popup is shown at the search location.
* You can also search coordinates in `latitude,longitude` format.

## Mobile

For a tour of the Field App's interface see [Tour the Field App](/field-app/tour-the-field-app).


# Your workspace

Organize mapping projects and collaborate efficiently in your workspace.

{% embed url="<https://40056855.fs1.hubspotusercontent-na1.net/hubfs/40056855/YourWorkspace_HelpCenter.mp4>" %}

Everything in Felt happens within your workspace - the central hub where all your maps and data live. Whether you're working solo or with an entire organization think of it as your mapping headquarters, where you can organize projects, manage collaboration and create maps. Your workspace can be customized to fit your specific mapping needs, allowing you to structure your projects as they grow and evolve over time.

## Workspace basics

Understanding your workspace layout will help you navigate Felt efficiently, giving you quick access to settings, collaborator management, and your maps.

<figure><img src="/files/j4jRPO1acL3q02ro6Cn9" alt=""><figcaption></figcaption></figure>

### Management

* ![](/files/3O2sCfZkqCMak4bWIkKe)**Settings**: In workspace settings, you can manage members, subscription plans, and generate API tokens for advanced integrations.
* ![](/files/0k6affrwKeMYtl2AhTWK)**Invite members:** Invite collaborators to your workspace by email and set appropriate permissions.

### Workspace organization

The left-side menu is split into two sections: **Maps** and **Data sources**.

#### Maps

* ![](/files/8cxog77t48pquvJ87Px3)**Recents**: Gives you quick access to your recently viewed maps.
* ![](/files/glw48N3XHzVPdtdbTOB8)**Drafts**: In progress maps that are only visible to you. When your drafts are ready to be shared with others, you can move them to projects.
* ![](/files/4xPKJuISwMN61qnxNOUR)**Projects**: Groups of maps your whole team can access. You can further organize your maps by creating folders within projects.

#### Data sources

Your workspace's data sources — **Felt Servers**, the **Global Library**, your **Cloud sources**, and your **Raster infrastructure** sources — live alongside your maps in the sidebar. You can browse, preview, and add data to maps without opening a map first. See [Data sources](/data-sources/data-sources).

### Filter and layout options

In the top right section, you have a variety of filter and layout options to view your maps which vary depending on whether you are viewing maps from Recents or inside of a Project.

### Manage your account

To switch or change the email address for your account, navigate to <https://felt.com/users/settings>.

1. Click on your email address (you may be prompted to set a password first)
2. Enter your new email address
3. Click the confirmation link in the email sent to the new email address

### Workspace tips

With a bit of exploration, you'll quickly discover the workflow that works best for your team's needs. Here are a few tips to get you started:

* Align your projects with your team's natural workflows, organizing by clients, departments, or initiatives to make navigation intuitive for everyone.
* Folders can be nested within projects for more granular organization of related maps.
* Use private projects to control who can access specific maps, making collaboration with both teams and clients more secure and efficient.
* Take advantage of the filtering options in Recents to quickly find the maps you're looking for, whether they're your own maps or ones shared within your workspace.

Learn more about [Workspaces and projects](/administration/workspaces-and-projects).


# Managing data

An overview of how to bring data into Felt, inspect and edit it, keep it fresh, and centralize it across your workspace.

Felt is built around layers. Every dataset you bring onto a map becomes a layer you can style, filter, edit, and share. This page is a map of what you can do with data in Felt. Each section links to the canonical page for more detail.

## 1. Getting data into Felt

#### Option A: upload a file

Drag and drop files onto a map, or use **Upload Anything** in the toolbar. See [Files](/upload-anything/files) for supported formats and size limits.

#### Option B: add via URL

Felt can read data directly from public URLs, including Google MyMaps, Google Sheets, SharePoint, XYZ tiles, ESRI services, and OGC services. See [URLs](/upload-anything/urls).

#### Option C: connect a cloud source (Enterprise)

Enterprise customers can connect databases, warehouses, object storage, and OGC/ESRI services as first-class workspace data sources. See [Cloud sources](/data-sources/cloud-sources) for the full list and setup.

#### Option D: create a new layer (Professional and Enterprise)

Create vector data directly in Felt with no source file required. See [Editing layers](/layers/editing-layers).

## 2. Inspecting data layers

Every vector layer has a table view that shows attribute data in a spreadsheet-like format, with sorting, filtering, searching, and selection linked to the map. See [Table view](/layers/table-view).

## 3. Keeping data up-to-date

Any layer can be refreshed with a new version of its underlying data without losing styling or configuration. Enterprise layers from cloud sources can refresh on a schedule. See [Refreshing data](/layers/refreshing-data).

## 4. Editing data (Professional and Enterprise)

On Professional and Enterprise plans you can edit geometry and attributes directly on the map or in the table view, with real-time collaboration across the workspace. See [Editing layers](/layers/editing-layers).

## 5. Maintain your team's data

**Felt Servers** are catalogs of published, styled, ready-to-reuse layers that anyone with access can drop onto a map. See [Felt Servers](/data-sources/felt-servers).


# Keyboard shortcuts

Speed up map creation with keyboard shortcuts.

{% embed url="<https://youtu.be/E6XYzCstmqs?si=-GMfNllq5wM9vKkg&t=4>" %}

Speed up your mapping workflow and work more efficiently without using your mouse by mastering keyboard shortcuts.

{% hint style="info" %}
All key chords that use **Cmd** on Mac use **Ctrl** on Windows.
{% endhint %}

### General

<table><thead><tr><th width="271">Key(s)</th><th>Behavior</th></tr></thead><tbody><tr><td><mark style="color:red;"><code>Esc</code></mark></td><td>Escape up one state</td></tr><tr><td><mark style="color:red;"><code>Cmd</code></mark> <mark style="color:red;"><code>Z</code></mark></td><td>Undo</td></tr><tr><td><mark style="color:red;"><code>Shift</code></mark> <mark style="color:red;"><code>Cmd</code></mark> <mark style="color:red;"><code>Z</code></mark></td><td>Redo</td></tr><tr><td><mark style="color:red;"><code>.</code></mark></td><td>Open Felt Menu</td></tr><tr><td><mark style="color:red;"><code>Cmd</code></mark> <mark style="color:red;"><code>Shift</code></mark> <mark style="color:red;"><code>,</code></mark></td><td>Copy map link to clipboard</td></tr><tr><td><mark style="color:red;"><code>Cmd</code></mark> <mark style="color:red;"><code>K</code></mark></td><td>Quick actions</td></tr><tr><td><mark style="color:red;"><code>felt.com/map/new</code></mark></td><td>Creates a new map</td></tr></tbody></table>

### Map navigation

<table><thead><tr><th width="273">Key(s)</th><th>Behavior</th></tr></thead><tbody><tr><td>⬆️ ➡️ ⬇️ ⬅️</td><td>Pan map</td></tr><tr><td><mark style="color:red;"><code>Spacebar</code></mark></td><td>(While held) Pan map</td></tr><tr><td><mark style="color:red;"><code>-</code></mark></td><td>Zoom out</td></tr><tr><td><mark style="color:red;"><code>+</code></mark></td><td>Zoom in</td></tr><tr><td><mark style="color:red;"><code>F</code></mark></td><td>Zoom to fit selection</td></tr><tr><td><mark style="color:red;"><code>0</code></mark></td><td>Reset zoom</td></tr><tr><td><mark style="color:red;"><code>Z</code></mark></td><td>(While held) * Draw zoom in rectangle * Click to zoom in</td></tr><tr><td><mark style="color:red;"><code>Alt Z</code></mark></td><td>(While held) * Draw zoom out rectangle * Click to zoom out</td></tr><tr><td><mark style="color:red;"><code>Double click</code></mark></td><td>Zoom in</td></tr><tr><td><mark style="color:red;"><code>Alt Double click</code></mark></td><td>Zoom out</td></tr><tr><td><mark style="color:red;"><code>Shift</code></mark> ⬅️ / ➡️</td><td>Rotate map in 15° increments</td></tr><tr><td><mark style="color:red;"><code>Shift</code></mark> ⬆️</td><td>Reset map to north</td></tr></tbody></table>

### View

<table><thead><tr><th width="276">Key(s)</th><th>Behavior</th></tr></thead><tbody><tr><td><mark style="color:red;"><code>Shift 1</code></mark></td><td>Open legend</td></tr><tr><td><mark style="color:red;"><code>Shift 2</code></mark></td><td>Open list</td></tr><tr><td><mark style="color:red;"><code>Shift 3</code></mark></td><td>Toggle legend/list</td></tr><tr><td><mark style="color:red;"><code>Shift 4</code></mark></td><td>Toggle data table</td></tr><tr><td><mark style="color:red;"><code>Cmd . or Cmd \</code></mark></td><td>Hide/show UI</td></tr><tr><td><mark style="color:red;"><code>Shift C</code></mark></td><td>Hide/show comment bubbles on map</td></tr></tbody></table>

### Data tools

<table><thead><tr><th width="278">Key(s)</th><th>Behavior</th></tr></thead><tbody><tr><td><mark style="color:red;"><code>Shift L</code></mark></td><td>Data sources</td></tr><tr><td><mark style="color:red;"><code>Cmd U</code></mark></td><td>Upload Anything</td></tr><tr><td><mark style="color:red;"><code>Cmd Shift U</code></mark></td><td>Upload from URL</td></tr><tr><td><mark style="color:red;"><code>/</code></mark></td><td>Search</td></tr></tbody></table>

### Drawing tools

<table><thead><tr><th width="279">Key(s)</th><th>Behavior</th></tr></thead><tbody><tr><td><mark style="color:red;"><code>P</code></mark></td><td>Pin tool</td></tr><tr><td><mark style="color:red;"><code>L</code></mark></td><td>Line tool</td></tr><tr><td><mark style="color:red;"><code>R</code></mark></td><td>Route tool</td></tr><tr><td><mark style="color:red;"><code>O</code></mark></td><td>Polygon tool</td></tr><tr><td><mark style="color:red;"><code>I</code></mark></td><td>Circle tool</td></tr><tr><td><mark style="color:red;"><code>M</code></mark></td><td>Marker tool</td></tr><tr><td><mark style="color:red;"><code>T</code></mark></td><td>Text tool</td></tr><tr><td><mark style="color:red;"><code>H</code></mark></td><td>Highlighter tool</td></tr><tr><td><mark style="color:red;"><code>N</code></mark></td><td>Note tool</td></tr><tr><td><mark style="color:red;"><code>K</code></mark></td><td>Link tool</td></tr><tr><td><mark style="color:red;"><code>X</code></mark></td><td>Clip tool</td></tr><tr><td><mark style="color:red;"><code>Shift</code></mark></td><td>Straight lines/routes/marker</td></tr></tbody></table>

### Comments

<table><thead><tr><th width="281">Key(s)</th><th>Behavior</th></tr></thead><tbody><tr><td><mark style="color:red;"><code>C</code></mark></td><td>Open comment tool and mode</td></tr><tr><td><mark style="color:red;"><code>Shift C</code></mark></td><td>Hide/show comment bubbles on map</td></tr></tbody></table>

### Selection actions

<table><thead><tr><th width="282">Key(s)</th><th>Behavior</th></tr></thead><tbody><tr><td><mark style="color:red;"><code>Shift</code></mark></td><td>(While held) Draw selection rectangle</td></tr><tr><td><mark style="color:red;"><code>Cmd X</code></mark></td><td>Cut</td></tr><tr><td><mark style="color:red;"><code>Cmd C</code></mark></td><td>Copy</td></tr><tr><td><mark style="color:red;"><code>Cmd V</code></mark></td><td>Paste</td></tr><tr><td><mark style="color:red;"><code>Cmd D</code></mark></td><td>Duplicate</td></tr><tr><td><mark style="color:red;"><code>Backspace / Delete</code></mark></td><td>Delete</td></tr><tr><td><mark style="color:red;"><code>Cmd A</code></mark></td><td>Select All</td></tr><tr><td><mark style="color:red;"><code>Cmd Shift L</code></mark></td><td>Lock / Unlock</td></tr><tr><td><mark style="color:red;"><code>Cmd G</code></mark></td><td>Group</td></tr><tr><td><mark style="color:red;"><code>Shift +</code></mark> ⬆️ ➡️ ⬇️ ⬅️</td><td>Move annotation 10px</td></tr><tr><td><mark style="color:red;"><code>Shift + Rotate</code></mark></td><td>Rotate in 15° increments</td></tr><tr><td><mark style="color:red;"><code>]</code></mark></td><td>Bring to front</td></tr><tr><td><mark style="color:red;"><code>Shift ]</code></mark></td><td>Bring forward</td></tr><tr><td><mark style="color:red;"><code>Shift [</code></mark></td><td>Send backward</td></tr><tr><td><mark style="color:red;"><code>[</code></mark></td><td>Send to back</td></tr></tbody></table>

### Route tool

<table><thead><tr><th width="284">Key(s)</th><th>Behavior (while drawing)</th></tr></thead><tbody><tr><td><mark style="color:red;"><code>Shift</code></mark></td><td>(While held) Skip segment route snapping</td></tr></tbody></table>

### Clip tool

<table><thead><tr><th width="287">Key(s)</th><th>Behavior (while drawing)</th></tr></thead><tbody><tr><td><mark style="color:red;"><code>Shift</code></mark></td><td>Lasso select and clip</td></tr></tbody></table>


# AI assistant

Ask a spatial question and the AI assistant finds the data, runs the analysis, and delivers the answer on the map.

{% embed url="<https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmRfGitkyjOEMvVsEyGWN%2Fuploads%2FNCAaKL0cFrYYwIAgLd1S%2FFelt%20AI%20Demo%20(1%20prompt%20light)-blog.mp4?alt=media&token=31b55546-38bd-4357-a268-4f692469a8d1>" %}

The AI assistant is built into every Felt map. Open the chat and ask for what you want — a dataset to find, an analysis to run, a style to apply — and it gets to work. Review the results, refine them in conversation, and share when you're done.

{% hint style="success" %}
Felt AI is included in the [Enterprise plan](https://felt.com/pricing) and available as an optional add-on on the Professional plan.
{% endhint %}

## What can the assistant do?

<figure><img src="/files/xHvLTDdMF2q69ptpjmxA" alt=""><figcaption></figcaption></figure>

Ask for what you want and the assistant handles the rest — here's what that looks like in practice.

**Find and add data.** The assistant finds the data you ask for, starting with Felt's Global Library of curated public datasets and everything connected to your workspace — your maps' layers, the workspace library, Felt Servers, and cloud databases. Need something more? It can search public data catalogs too.

> Find flood zones for Harris County and add them to this map.

**Query your databases.** Connected to Snowflake, BigQuery, Databricks, Postgres, Redshift, or SQL Server? Ask in plain language and the assistant writes the SQL, runs it, and turns the results into layers.

> Which of our properties are within 5 miles of a wildfire hazard zone? Use the portfolio table in Databricks.

**Run spatial analysis.** Buffers, joins, filters, aggregations, and more — the assistant creates new layers from your existing ones.

> Count the number of permits in each neighborhood and add the result as a new layer.

**Style your map.** The assistant styles layers based on what's actually in your data — categorical palettes, numeric ramps, heatmaps, H3 hexbins, labels, and popups — using [Felt Style Language](https://developers.felt.com/felt-style-language) under the hood.

> Style this as a choropleth by median income, with a legend that reads well on the light basemap.

It also handles the smaller things: zooming to what matters, showing or hiding layers and legend items, pulling in data from URLs (ESRI services, WMS, GeoJSON, and more), and naming your map.

As it works, the chat shows each step — what it's reading, what it's running, what changed on the map — so you can follow along and jump in at any point.

## Opening the assistant

There are two ways to open the assistant on any map:

* Click the **Felt AI** button (![](/files/VFQbTbSJKlj2w3U1n6D1)) in the toolbar
* Press **Cmd+Shift+K** (Mac) or **Ctrl+Shift+K** (Windows)

The chat panel opens on the right side of your map. If you're not sure where to start, try one of the suggested prompts — or just ask the assistant what it can see and do.

## Tour the chat window

* **Conversation dropdown** — shows the current conversation's title. Click it to switch between your conversations on this map.
* **New chat** — starts a fresh conversation. Use this when you're switching to an unrelated task; a focused conversation gets better results.
* **Copy link to this chat** — copies a view-only link to the current conversation so you can share it. Appears once the conversation has started (see [Share a conversation](#share-a-conversation) below).
* **Close** — closes the panel. Your conversation is saved and will be right where you left it when you reopen the assistant.
* **Prompt box** — type your request and press Enter. Type **@** to reference a specific layer or data source (see below).
* **Microphone** — speak your prompt instead of typing it. Dictation adds to whatever you've already typed; click the microphone again or press **Esc** to stop. Available in browsers that support speech recognition.
* **Response actions** — hover over any response to **copy** it or give **feedback**.

## Edit mode vs. view mode

**In edit mode** — the assistant works on the live map: what it adds, styles, and computes appears immediately for you and your collaborators.

**In view mode** — submitting a prompt creates **your own duplicate of the map**, opened in edit mode with your prompt carried over. The original is never modified. Your duplicate is saved to your workspace and shows a card linking back to the source map. (Have Edit access? You can choose to edit the map directly instead.)

{% hint style="info" %}
Using the assistant in edit mode requires a Full Access seat with Edit access on the map. Anyone in the workspace can prompt from view mode, since the work happens on their own copy.
{% endhint %}

## Conversations

You can have multiple conversations with the assistant on every map. They're saved with the map and titled automatically as you work:

* **Continue where you left off** — reopening the assistant loads your most recent conversation; it remembers what you discussed and built.
* **Start fresh** with **New chat** when you change topics. When you have previous conversations on a map, the panel's start screen lists your recent chats so you can jump back in.
* **Switch between conversations** from the dropdown at the top of the panel — useful when you're iterating on styling in one thread and data questions in another.

## What the assistant can see

The assistant sees what you can see — nothing more. It can read:

* **The current map** — layer names, schemas, and (for queryable layers) the data itself
* **Your workspace** — the library, Felt Servers, and connected data sources
* **Felt's Global Library** — curated public datasets
* **Public GIS sources** — when you ask it to search for data

Queries against your databases run with your existing connection's access, and Felt never trains models on your data.

Type **@** in the prompt box to point the assistant at exactly the data you want. You can reference:

* Layers on the current map
* Layers in your workspace library
* Layers in Felt's Global Library
* Connected data sources (your databases)

> Compare @Census Tracts with @Store Locations and highlight tracts with no store within 2 miles.

You don't have to use **@** — but referencing removes ambiguity when names are similar or your workspace contains many sources.

## Sharing what you build

Everything the assistant produces is a normal part of your Felt map — layers, styles, and analysis results. Share the map the way you always do (the **Share** button), and viewers see the results without needing Felt AI access themselves.

### Share a conversation

Sometimes it's the conversation itself you want to pass along — how you asked for something, and what the assistant did. Click **Copy link to this chat** (the link icon in the chat header) to copy a view-only link to the current conversation. The button appears once a conversation is underway.

Anyone who opens the link sees the conversation in a read-only view alongside the map. They can read through the exchange and copy individual responses, but they can't continue the conversation or change the map from it. Opening the link requires viewing access to the map — someone without access can't view the shared conversation.

## Felt AI beyond the assistant

This page covers the AI assistant — the chat panel on the map, where Felt AI has its full toolkit. Felt AI also shows up in other places, scoped to the job at hand:

* In the [Extensions](/developer-platform/extensions), [custom popups](/developer-platform/custom-popups), and [SQL queries](/data-sources/cloud-sources/sql-queries) editors, Felt AI drafts that editor's code, which you can read and edit. See [More ways to work with AI](/felt-ai/more-ways-to-work-with-ai).
* Through [MCP integrations](/felt-ai/mcp), external AI tools like Claude and ChatGPT get Felt AI's capabilities in their own interfaces, with your workspace permissions.

## Frequently asked questions

<details>

<summary>Who can use Felt AI?</summary>

Felt AI is included in the Enterprise plan and available as an add-on on the Professional plan (not on legacy plans). Working in edit mode takes a Full Access seat with Edit access on the map. Anyone in the workspace can prompt from view mode and gets their own copy of the map.

</details>

<details>

<summary>Does the assistant change my map without asking?</summary>

In edit mode, yes — it applies work as it goes, narrating each step so you can see what changed and ask it to adjust or undo. In view mode it only ever works on your own duplicate.

</details>

<details>

<summary>Can I see or edit the SQL and styling the assistant generates?</summary>

No. The assistant delivers results — its SQL runs behind the scenes and its styling lands directly on the layer, where you can adjust it in the style editor afterwards. For AI-drafted code you can edit, use [SQL queries](/data-sources/cloud-sources/sql-queries), [custom popups](/developer-platform/custom-popups), or [Extensions](/developer-platform/extensions).

</details>

<details>

<summary>What data can the assistant access?</summary>

Only what you can access: the current map, your workspace library and connected sources, the Global Library, and public sources when you ask it to search. Felt never trains on your data.

</details>

<details>

<summary>Are my conversations private?</summary>

They're saved with the map so you can pick up where you left off. The changes the assistant makes in edit mode are visible to everyone with access to the map, like any other edit.

</details>

<details>

<summary>Is Felt AI secure?</summary>

Yes. Database connections are read-only unless you grant write access, and SQL queries only ever run `SELECT` statements. Felt AI works within your existing SSO and permissions, and its actions are logged like any other activity in your workspace. Queries run live against your connected databases, in their native SQL, rather than copying your data elsewhere. Felt doesn't train models on your data, and none of it becomes public. Felt AI runs on frontier models hosted on Amazon Bedrock.

</details>


# MCP integrations

Connect AI tools to Felt to turn natural language into maps, apps, and analysis.

<figure><img src="/files/s4O6zLBGr53xiGdkn6zY" alt=""><figcaption></figcaption></figure>

Felt MCP Server uses the [Model Context Protocol (MCP)](https://modelcontextprotocol.io/docs/getting-started/intro) to connect to AI agents and unlock the full power of Felt. Create maps, query your data warehouse, run spatial analysis, and style your data – all from natural language prompts, using your existing Felt workspace permissions.

{% hint style="success" %}
This feature is only available to customers on the [Enterprise plan](https://felt.com/pricing). [Get in touch](https://felt.com/demo) for access.
{% endhint %}

## What can you do with Felt MCP?

<figure><img src="/files/14GDIC5ttJYeWmtx93Rq" alt=""><figcaption></figcaption></figure>

* **Make maps.** Create, update, and organize maps and projects.
* **Bring in data.** ArcGIS services, WMS, GeoJSON, Shapefiles, your workspace data sources, the Global Library of public data, or your cloud data sources.
* **Write SQL.** Query Postgres / PostGIS, Snowflake, BigQuery, Redshift, Databricks, or Microsoft SQL Server. Dialect-aware guidance is built in, so the agent doesn't have to guess.
* **Run spatial analysis.** Query layers already on the map, join them, filter them, and generate new layers from the results.
* **Style automatically.** Categorical, numeric, heatmap, H3. All in Felt Style Language (FSL), with no hand-authored JSON.
* **Collaborate.** Pins, routes, polygons, and notes via GeoJSON. Permissions are inherited from your workspace, so anything the agent produces is immediately shareable under the access controls you already have.

## Connecting to Felt MCP

The Felt MCP Server uses **Streamable HTTP** transport with **OAuth** authentication.

**Server URL:** `https://felt.com/mcp`

When you first connect, your browser will open and prompt you to log in to Felt and authorize access. There are no API keys to manage.

### Claude Code

Run this command in your terminal:

```bash
claude mcp add --transport http felt https://felt.com/mcp --scope user
```

> `--scope user` makes Felt available across all projects. Omit it to scope to the current project, or use `--scope project` to commit it to a shared `.mcp.json`.

Verify in Claude Code with `/mcp` or:

```bash
claude mcp list
```

### Claude

Felt is listed in Claude's connectors directory, so there's nothing to configure manually.

1. Open the [Felt Maps connector](https://claude.ai/directory/connectors/felt-maps) in Claude's directory.
2. Click **Connect** and complete the OAuth login in your browser.

That's it — Felt's tools are now available across Claude.ai, Claude Desktop, and the Claude mobile apps.

{% hint style="warning" %}
Connectors require a Claude Free, Pro, Max, Team, or Enterprise plan. On Team/Enterprise, an Owner may need to enable the connector at the organization level first.
{% endhint %}

### ChatGPT

1. Open ChatGPT and go to **Settings → Apps & Connectors → Advanced settings**.
2. Toggle **Developer Mode** on.
3. Return to **Apps & Connectors** and click **Add new connector**.
4. Fill in:
   * **Name:** `Felt`
   * **MCP Server URL:** `https://felt.com/mcp`
   * **Authentication:** OAuth
   * Check **I trust this application**
5. Click **Create** and complete the Felt OAuth login.

{% hint style="warning" %}
Developer Mode is available on ChatGPT Plus, Pro, Business, Enterprise, and Edu plans. On Business/Enterprise/Edu, only admins can enable Developer Mode and publish the connector for the workspace.
{% endhint %}

### Databricks

1. Follow the guide for [Installing an external MCP Server](https://docs.databricks.com/aws/en/generative-ai/mcp/external-mcp?language=Dynamic+Client+Registration)
2. When [creating the connection](https://docs.databricks.com/aws/en/query-federation/http#connection), use the following settings:
   * **Host:** `https://felt.com`
   * **Connection type:** `HTTP`
   * **Auth type:** `Dynamic Client Registration`
   * **Base path:** `/mcp`
   * **Is mcp connection:** `true`
3. Click **Login** and complete the Felt OAuth login.

{% hint style="warning" %}
A Databricks workspace with the **Managed MCP Servers** preview enabled is required. Your Databricks user must also have the `CREATE CONNECTION` privilege.
{% endhint %}

### Codex

Edit `~/.codex/config.toml` (or run `codex mcp add`) and add:

```toml
[mcp_servers.felt]
url = "https://felt.com/mcp"
```

Then authenticate:

```bash
codex mcp login felt
```

Verify in Codex with `/mcp` or:

```bash
codex mcp list
```

### Gemini CLI

Edit `~/.gemini/settings.json` (user-level) or `.gemini/settings.json` (project-level) and add:

```json
{
  "mcpServers": {
    "felt": {
      "httpUrl": "https://felt.com/mcp"
    }
  }
}
```

Restart Gemini CLI. Inside the CLI:

```bash
/mcp auth felt
```

This launches the Felt OAuth flow. Once authorized, run `/mcp` to confirm Felt is connected.

> You can also use the equivalent CLI command: `gemini mcp add -t http felt https://felt.com/mcp`

### VS Code (GitHub Copilot)

1. Open the Command Palette (`Cmd/Ctrl+Shift+P`) and run **MCP: Open User Configuration** (for global) or create `.vscode/mcp.json` in your project (for workspace-scoped).
2. Add:

```json
{
  "servers": {
    "felt": {
      "type": "http",
      "url": "https://felt.com/mcp"
    }
  }
}
```

3. Save the file. A **Start** CodeLens appears above the server entry — click it to connect and complete OAuth in your browser.
4. Open Copilot Chat, switch to **Agent** mode, and click the tools icon to confirm Felt's tools are listed.

### Cursor

1. Open **Cursor Settings → Tools & MCP** and click **+ New MCP Server**, or create `~/.cursor/mcp.json` (global) or `.cursor/mcp.json` (project) directly.
2. Add:

```json
{
  "mcpServers": {
    "felt": {
      "url": "https://felt.com/mcp"
    }
  }
}
```

3. Save the file. Return to **Settings → Tools & MCP** — Cursor will start the connection and prompt you for OAuth in a browser window.
4. A green dot next to `felt` confirms it's connected. Felt's tools are then available in Agent mode (`Cmd/Ctrl+I`).

## Tool reference

A reference of every tool exposed by the Felt MCP server, grouped by purpose.

### Account & workspace

| Tool       | Description                                                                  |
| ---------- | ---------------------------------------------------------------------------- |
| `who_am_i` | Get information about the currently logged-in user and their Felt workspace. |

### Projects

| Tool            | Description                                                           |
| --------------- | --------------------------------------------------------------------- |
| `list_projects` | List all projects in the current workspace.                           |
| `get_project`   | Get details about a specific project, including the maps it contains. |

### Maps

| Tool         | Description                                                                                                                   |
| ------------ | ----------------------------------------------------------------------------------------------------------------------------- |
| `create_map` | Create a new map in the user's Felt workspace. Optionally sets a title, basemap style, center coordinates, and zoom level.    |
| `list_maps`  | List the maps the current user can access, ordered by most recently visited. Supports a fuzzy title filter.                   |
| `get_map`    | Get a map's metadata, including its title, location, basemap, and layer count.                                                |
| `render_map` | Render a map inline as an interactive widget — a one-shot snapshot of the map's state at the moment it's called.              |
| `update_map` | Update a map's title, basemap style, zoom level, or basemap label visibility.                                                 |
| `share_map`  | Set a map's public access level (private, view-only, view and comment, or view, comment, and edit) and return its share link. |
| `delete_map` | Delete a map.                                                                                                                 |

### Layers – discovery & inspection

| Tool                   | Description                                                                                                                                                             |
| ---------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `get_map_layers`       | Get the list of layers on a map, organized by layer group. Includes layer names, IDs, visibility, and geometry types.                                                   |
| `get_layer_properties` | Get a layer's name, caption, geometry type, and style. Useful before modifying styling.                                                                                 |
| `inspect_layer`        | Get a layer's details: full column schema (column names, types, sample values, and summary stats), plus its visibility and legend items.                                |
| `browse_felt_library`  | List Global Library data — boundaries, demographics, infrastructure, and more — that can be added to maps.                                                              |
| `list_felt_servers`    | List the workspace's Felt Servers — named, foldered collections of reusable layers that can be added to multiple maps. Returns each server's ID, name, and description. |
| `browse_felt_server`   | Browse a single Felt Server's contents: its reusable layers and layer groups, organized into their folders.                                                             |

### Layers – creating & adding

| Tool                            | Description                                                                                                                                                                                                         |
| ------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `duplicate_layer_to_map`        | Copy a layer or layer group onto a map. The source can be a layer already on the map, a Felt library dataset, a Felt Server layer, or a layer from another map.                                                     |
| `import_layer_from_url`         | Add a new layer to a map by fetching from a URL. Supports ArcGIS services, WMS, GeoJSON, Shapefiles, and other formats.                                                                                             |
| `prepare_file_upload`           | Get an upload slot for adding a local file to a map as a new layer, or for refreshing an existing file-backed layer in place.                                                                                       |
| `upload_contents_to_map`        | Add inline text content (CSV, TSV, GeoJSON, KML, GPX) to a map as a new layer, or refresh an existing uploaded layer, without performing a separate file upload. Best for small data already available as a string. |
| `add_data_source_table_to_map`  | Add an entire table from a connected data source to a map as a new layer.                                                                                                                                           |
| `create_layer_from_data_source` | Create a new map layer from a SQL query against a connected data source. The query must include a geometry column.                                                                                                  |
| `create_layer_from_felt_layers` | Create a new map layer from a SQL query against existing Felt layers. The query must include a geometry column.                                                                                                     |

### Layers – updating & deleting

| Tool                           | Description                                                                                                                                |
| ------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ |
| `update_layer_properties`      | Update a layer's name, caption, or FSL style. Only the fields you supply are changed.                                                      |
| `refresh_url_layer`            | Re-fetch a URL-backed layer's source to pick up the latest data. Processing is asynchronous.                                               |
| `refresh_data_source_layer`    | Re-run a data-source-backed layer's query (or re-read its table) to pick up the latest data. Processing is asynchronous.                   |
| `poll_layer_processing_status` | Wait for a layer to finish processing. Returns `in_progress`, `completed`, or `failed`. Configurable maximum wait of 5, 10, or 30 seconds. |
| `organize_layers`              | Group, ungroup, or reorder layers and layer groups on a map.                                                                               |
| `set_visibility`               | Show or hide layers, layer groups, and individual legend items (categories or class breaks).                                               |
| `set_layer_group_interaction`  | Set how a layer group's layers toggle in the legend (checkboxes, slider, single-select, or multi-select).                                  |
| `delete_layer`                 | Delete a layer from a map.                                                                                                                 |

### Data sources

| Tool                                | Description                                                                                                                                               |
| ----------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `list_data_sources`                 | List external databases connected to the workspace (Postgres, Snowflake, BigQuery, etc.), including their type and the SQL dialect to use.                |
| `browse_data_source_tables`         | List the tables and saved queries available inside a connected database. Does not include column schemas.                                                 |
| `inspect_data_source_table_columns` | Get the column names and types for a specific table inside a connected database.                                                                          |
| `get_sql_guidance`                  | Load the SQL dialect reference and syntax rules for a data source or set of layers before writing queries. The correct dialect is resolved automatically. |
| `get_tabular_data_from_data_source` | Run a read-only SELECT query against a connected data source and return tabular results to the user. Does not render anything on the map.                 |
| `get_tabular_data_from_felt_layers` | Run a read-only SELECT query against existing Felt layers and return tabular results to the user. Does not render anything on the map.                    |

### Styling

| Tool           | Description                                                                                                                                                                                                         |
| -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `generate_fsl` | Generate FSL (Felt Style Language) JSON for any layer type. Supports colors, classification, labels, popups, filters, and icons. When given a layer ID, inspects the layer's data to make informed styling choices. |

### Annotations

| Tool                 | Description                                                                                                                                                         |
| -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `list_annotations`   | Return the editable annotations on a map (`Place`, `Rectangle`, `Circle`, `Text`, `Note`, `Link`, `Line`). Other annotation types drawn in the UI are not included. |
| `upsert_annotations` | Create or update annotations on a map. Omit `id` to create; include `id` to update an existing annotation in place.                                                 |
| `delete_annotation`  | Delete a single annotation from a map.                                                                                                                              |

### Help

| Tool          | Description                                                                                                                              |
| ------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
| `help_center` | Answer questions about how Felt works (features, sharing, permissions, billing, account settings, etc) from Felt's official help center. |


# More ways to work with AI

Describe a tool, a popup, or a query, and Felt AI writes the code for you.

{% embed url="<https://youtu.be/m6qaJ6GMUPs?si=R6GY_E6DR-aeEf5d>" %}

Felt AI helps you build Extensions, design Custom popups, and write SQL queries using natural language.

* [**Extensions**](/developer-platform/extensions) — create interactive tools on your map where users click, filter, and explore. Felt AI drafts JS SDK code you can read, edit, and run.
* [**SQL queries**](/data-sources/cloud-sources/sql-queries) — ask spatial questions of your cloud database. Felt AI translates your question into SQL you can inspect, edit, and run, and results become a map layer.
* [**Custom popups**](/developer-platform/custom-popups) — create rich displays of formatted information when users click a feature. Felt AI drafts the HTML, CSS, and JavaScript, which you can edit directly.

See [Prompting tips](/felt-ai/prompting-tips) for how to get the best output from each of these, and from the assistant itself.


# Prompting tips

How to get the best results from Felt AI — whether you're working with the AI assistant, building Extensions or custom popups, or writing SQL queries.

Felt AI shows up in a few places, and each one works a little differently. This page collects prompting tips by surface: the [AI assistant](/felt-ai/ai-assistant), [Extensions](/developer-platform/extensions), [Custom popups](/developer-platform/custom-popups), and [SQL queries](/data-sources/cloud-sources/sql-queries).

## Tips that apply everywhere

**Use exact names.** Generic references create ambiguity. Use actual layer names, attribute names, and values from your data.

**✅ Good:**

> Filter the "permits" layer to show only records where permit\_type is "residential" and status is "pending".

❌ **Weak:**

> Show me the pending residential permits.

**Handle edge cases.** Say what should happen when data is missing or a filter returns nothing.

> If assessed\_value is null, display "Not available" instead of blank.

**Describe the format you want.** When output format matters, give an example.

> Format dates as March 15, 2025 not 2025-03-15. Display currency as "$1,250,000" with commas and dollar sign.

**Build incrementally.** Complex requests built in one prompt usually need a lot of fine-tuning. Small, testable steps are easier to verify, easier to debug, and let you adjust direction based on what's working. When something isn't right, refine rather than starting over.

## AI assistant

The [AI assistant](/felt-ai/ai-assistant) finds data, runs analysis, and styles your map from conversation — you describe what you're trying to learn or show, and it delivers results on the map.

### Describe the goal, and let it work

Give the assistant your intent and constraints, not a step-by-step procedure. It can see your layers, connected data sources, and Felt's data libraries, and it will pick the data, analysis, and styling to match your goal.

**✅ Good:**

> I'm evaluating flood exposure for our Houston portfolio. Add FEMA flood zones, identify which of our properties fall in high-risk zones, and style the result so risk levels are obvious at a glance.

❌ **Weak:**

> Add a layer. Now filter it. Now change the colors.

### Reference data with @

Type **@** to point the assistant at exactly the layer or data source you mean — especially useful when names are similar or your workspace is large.

> Compare @Census Tracts with @Store Locations and highlight tracts with no store within 2 miles.

### Iterate in conversation

The assistant keeps the context of your conversation, so refine the way you'd direct a teammate:

> Make the high-risk zones more prominent and mute everything else.
>
> That classification hides the variation I care about — try quantiles instead.
>
> Zoom to where the risk is concentrated.

### Keep conversations focused

Start a **New chat** when you switch to an unrelated task. A conversation about one problem gets better results than one carrying leftover context from three different tasks.

### Ask it to explain

If you want to understand or verify what it did:

> Walk me through how you calculated that risk score.
>
> Which data source did that layer come from?

## Extensions

[Extensions](/developer-platform/extensions) are interactive tools where users click, filter, and explore. In the Extensions editor, Felt AI drafts JS SDK code you can read, edit, and run. Think: "when the user does X, show them Y."

**What to specify:**

* The trigger event (click, select, filter change)
* What layers are involved
* What should display in the panel
* What visual feedback appears on the map
* How to reset or clear previous results

**✅ Good:**

> Create an interactive tool where I can click on any school to find nearby parcels. When I click a school:
>
> 1. Draw a 500-meter buffer around it
> 2. Spatially filter the parcels within that radius
> 3. Show a panel with the school name, count of nearby parcels, and a list of those parcels with their zoning type and assessed value
> 4. Clear previous results when I click a different school

❌ **Weak:**

> Find parcels near schools.

For complex tools with multiple interactive features, number your requirements — each one is small and testable, and the AI follows the logic better than a run-on description.

{% hint style="info" %}
**Tip:** responses can give general guidance and recommendations if you specify "don't write code" in your prompt

> Don't write code, but how would I filter and analyze my parcel layer based on selecting a neighborhood in my boundaries layer?
> {% endhint %}

{% hint style="info" %}
**Tip:** you can prompt for more verbose logging to appear in the console or extension panels when debugging
{% endhint %}

**When refining**, check each layer of functionality — do clicks, filters, and selections behave correctly? Are calculations returning expected results? — and fix specifically:

> The count isn't updating when I change the filter — can you check why?
>
> Remove the chart, just keep the attribute summaries.

## Custom popups

[Custom popups](/developer-platform/custom-popups) display formatted information when users click a feature. Felt AI drafts the HTML, CSS, and JavaScript, which you can edit directly.

**What to specify:**

* Exact attributes to show and their format
* Any conditional styling or specific branding (color-code status values, show icons)
* Links or images to include

**✅ Good:**

> Create a popup for this layer showing:
>
> * Address as a bold heading
> * Price formatted as currency
> * Bedrooms and bathrooms as "3 bd | 2 ba"
> * Square footage with comma separator
> * A link to "View listing" using the listing\_url attribute

❌ **Weak:**

> Add a popup for properties.

Preview in both desktop and mobile modes before saving — layout requests like "keep it to two lines on mobile" work well.

## SQL queries

[SQL queries](/data-sources/cloud-sources/sql-queries) let you ask spatial questions of your cloud database. Felt AI translates your question into SQL you can inspect, edit, and run, and results become a map layer.

**What to specify:**

* The spatial relationship you're looking for (within distance, intersects, contains)
* Which tables to use
* Any filters or conditions
* What attributes to include in results

{% hint style="info" %}
**Tip:** if you're unsure about your schema, ask first

> What tables do I have related to emergency response? What fields are available?
> {% endhint %}

**✅ Good:**

> Find all fire stations within 2 miles of areas where response times exceeded 10 minutes last year. Join with the incidents table and show the count of slow responses per station.

❌ **Weak:**

> Show me fire station coverage.

If a query looks slow or returns too much, ask the AI to optimize it or add limits — and review the SQL it wrote; it's yours to tune.


# Getting started

Introducing the Field App: Felt's mobile app built for seamless data collection workflows on iOS and Android.

The Field App brings Felt's modern mapping experience to your mobile device. Whether you're collecting data in the field, monitoring live operations, or reviewing dashboards between meetings, the Field App connects you to your maps with real-time syncing across devices. Bringing an intuitive interface to field data collection workflows enables seamless collaboration between Felt's mobile and web platforms, which transforms how organizations bridge fieldwork and desktop workflows.

The app includes:

* **Full viewer experience:** access to all your maps and dashboards on mobile
* **Built-in GIS tooling:** measurements, spatial filters, table view, and search
* **Structured data collection:** use Felt layers and surveys to standardize how your team collects field data on the ground
* **Geotagged photos:** use location tracking to attach photos directly to features or location-based comments
* **Offline support:** save maps to your device to work without connectivity and sync automatically when reconnected

<figure><img src="/files/idxnf5QQpzVoZT79GLDw" alt=""><figcaption></figcaption></figure>

## Download the app

#### Android

Download the Field App from the [Google Play store](https://play.google.com/store/apps/details?id=com.felt.mobile).

#### iOS

Download the Field App from the [App Store](https://apps.apple.com/us/app/felt-maps-field-surveys-gis/id6754033379).

## Log in

{% hint style="success" %}
You need a Felt account to log in to the Field App. [Create an account](https://felt.com/signup) on desktop first, or ask your Felt Admin to invite you to the workspace.
{% endhint %}

You'll immediately be prompted to log in. Logging in is email-first: enter your email address and tap **Next**, and Felt routes you to the right method — password, Sign in with Google, or SSO. For SSO, your provider is detected automatically from your email.

For all the ways to log in, see [Logging in](/administration/logging-in).

<figure><img src="/files/Lis3jlNURxmxMd0wQmPm" alt="" width="188"><figcaption></figcaption></figure>

## Open a map

After logging in you'll be automatically directed to your Felt workspace. You'll see the Felt home view showing you Recents, Felt maps you've recently viewed, by default. Tap on any of the maps to view the full map view.

<figure><img src="/files/3vCu3rBoORM7pDsrZd3F" alt=""><figcaption></figcaption></figure>

Clicking on the <img src="/files/x8snEeL7UNTTdE8NTa4n" alt="" data-size="line"> menu (top-left) lets you navigate around the workspace to switch into projects, maps, and manage Workspace settings.

<figure><img src="/files/GVb6mTtwwjxTVCPLjkW7" alt="" width="188"><figcaption></figcaption></figure>

{% hint style="info" %}
Looking for a complete tour of the app? Check out [Tour the Field App](/field-app/tour-the-field-app).
{% endhint %}

#### Open map links via email

The Field App supports deep linking for map links, which means when the Field App is installed, opening a map link on mobile will automatically open the map in the Field App. When your email address is invited to a map in the [Share menu](https://help.felt.com/sharing-and-collaboration/sharing-a-map#share-menu), you will receive an email with a link to view the map. Tapping on the link in the email will automatically open the map in the Field App.

## Contribute

Your ability to **comment** or **collect data** depends on your seat and your permissions on the map being viewed. Anyone with a Felt account can open maps shared with them in the Field App, and any member with a Full Access seat can comment — even with only View permission on the map. Viewer seats can read comments but can't post them. Members with **Contribute** permission can also draw annotations, edit features, and add new features. Members with **Edit** permission have all the same capabilities plus map management. For more detailed information on permissions, see our [FAQ](https://help.felt.com/field-app/getting-started?q=field+a#how-do-permissions-work-with-the-field-app).

### Comment

Leaving a comment on the map is helpful for adding ad-hoc field observations and collaborating with teammates in real-time to resolve issues and coordinate plans. Data gathered with comments includes free text and photos, and you can tag teammates to notify them via email immediately.

1. Tap the plus button <img src="/files/4BCexrU4qpRdNIVGnveg" alt="" data-size="line"> on the bottom-right and select **Comment** from the menu panel. (Members with View permission see a comment button <img src="/files/AcoEaypEJjGGY0IUlKgq" alt="" data-size="line"> instead)

<figure><img src="/files/98QS7jZWOO3Nv4avFmcl" alt="" width="188"><figcaption></figcaption></figure>

2. Pan around the map to position your comment. You can use location tracking to snap the crosshairs to your current location. Tap on the location icon ![](/files/NvlZETRn3V2SGPWJAIb7) on the bottom right of your screen.
3. Type in your comment in the bottom panel.

   1. Commenters can tag teammates (<img src="/files/g9I03tMjFrzwxfynxyWc" alt="" data-size="line">) and tag features (**+ ...**). Members with Contribute or Edit permission can also add photos (<img src="/files/XNYUk50fc0GTCpkchcAS" alt="" data-size="original">).

   <figure><img src="/files/pDHRZl10bxFNwQDRBJ2z" alt="" width="375"><figcaption></figcaption></figure>
4. Tap the pink submit arrow button <img src="/files/ulQq5KRh9mqeVv8heCeE" alt="" data-size="line"> to add comment to map

#### Tagging features

Comments automatically detect if you are near existing features, and you can tag specific features to associate the comment with that feature. When your comment is near multiple features, tap on the **+ Point at** option from the comment panel to select which feature to tag in the comment.

<figure><img src="/files/Ji9uMGa2ifprdVLHMhXm" alt="" width="188"><figcaption></figcaption></figure>

When only one feature is nearby, the comment panel will mention the specific feature:

<figure><img src="/files/d8l62uBo7xVqDEiwvE6B" alt="" width="375"><figcaption></figcaption></figure>

You can also tag features directly from the feature popup panel. Click on the **...** menu in the popup panel to add a comment.

<figure><img src="/files/zbWbVtUFINRoHnXOfLWs" alt="" width="188"><figcaption></figcaption></figure>

#### Managing comments

In the Field App you can manage comments on each map.

Click on the **...** at the top-right of the map view to view the comment panel and all comments in list form. Double-tap on a comment from the panel to zoom directly to it.

{% columns %}
{% column %}
From the comment panel you can:

* Show/hide comments on the map
* View resolved comments
* Zoom to comment (double tap)
  {% endcolumn %}

{% column %}

<figure><img src="/files/fDm2gRbCTDAPqmoggLI5" alt="" width="188"><figcaption></figcaption></figure>
{% endcolumn %}
{% endcolumns %}

{% columns %}
{% column %}
From this comment view panel, tapping on **...** next to each comment allows you to:

* Resolve comments
* Copy a map link to specific comments
* Copy comment ID (for API)
* Delete comments
  {% endcolumn %}

{% column %}

<figure><img src="/files/E89hFSZwj1pengDhgEL1" alt="" width="188"><figcaption></figcaption></figure>
{% endcolumn %}
{% endcolumns %}

{% columns %}
{% column %}
Manage individual comments by tapping on the **...** menu next to the specific comment from the map view:

* Resolve the comment
* Edit the comment
* Copy a link to specific comments
* Copy comment ID (for API)
* Delete comments
  {% endcolumn %}

{% column %}

<figure><img src="/files/oX2uiU0ewETZmpyuAeBS" alt="" width="188"><figcaption></figcaption></figure>
{% endcolumn %}
{% endcolumns %}

{% hint style="info" %}
Looking for a complete tour of the app? Check out [Tour the Field App](/field-app/tour-the-field-app).
{% endhint %}

### Data collection

Use data collection workflows when you need to build and maintain a structured dataset, manage assets on the ground, collect records that will persist long-term, and to run reporting from field observations. Online edits on mobile are immediately reflected for other viewers looking at the map.

You need Contribute or Edit permission to create new features or edit data layers on the map.

<figure><img src="/files/C72AlGEFLm4SOvQT2JKJ" alt=""><figcaption></figcaption></figure>

1. Tap the plus button <img src="/files/4BCexrU4qpRdNIVGnveg" alt="" data-size="line"> on the bottom-right.
2. Tap on the layer you want to add features to from the panel (**ADD DATA** section)

   <figure><img src="/files/lddGJggFa2IvYfdUvcdX" alt="" width="188"><figcaption></figcaption></figure>
3. A crosshair will appear on the map where the point (or first point) will be placed. You can use [location tracking](#location-tracking) to snap the crosshairs to your current location. Tap on the location icon ![](/files/NvlZETRn3V2SGPWJAIb7) on the bottom right of your screen.

   <figure><img src="/files/N4HNjwOxcYRIv3hPsjYc" alt="" width="196"><figcaption></figcaption></figure>
4. Pan across the map and tap **Add Point** to place a vertex. For lines and polygons, the point will add a vertex to the shape and each tap will extend your shape from the last vertex
5. Continue panning to place additional points, tapping **Add Point** to place more vertices

{% columns %}
{% column width="50%" %}

<div align="center"><figure><img src="/files/TjiZQN583FP6o7B5Jde4" alt="" width="188"><figcaption></figcaption></figure></div>
{% endcolumn %}

{% column width="50%" %}

<div align="center"><figure><img src="/files/J2kCi2vxwTdnI66a7HAn" alt="" width="188"><figcaption></figcaption></figure></div>
{% endcolumn %}
{% endcolumns %}

6. Tap **Done** (or double-tap **Add Point** ) to exit edit mode

{% hint style="info" %}
While drawing you can undo / redo your edits by tapping on the arrows (bottom-left)

<img src="/files/zpL5jFRfaPw0kEf6jVmf" alt="" data-size="original">
{% endhint %}

#### Supported data types

* Points
* Lines
* Polygons

#### **Edit existing features**

To edit existing features, tap on the feature and then tap on the pencil icon <img src="/files/SJtCf8Zc7YTMdwMFqcOz" alt="" data-size="line"> from the popup panel. You'll first be shown the attribute table to edit the feature's attributes, but tapping **Edit geometry** allows you to adjust the shape of the feature.

<figure><img src="/files/rd62bfennh9LQP33aawZ" alt="" width="188"><figcaption></figcaption></figure>

Tap any existing vertex to select and edit it, or move the entire shape by dragging it around the map. For lines and polygons, **pink-filled circles, called "hint vertices" will appear** between vertices as you zoom in around a shape. Tapping them will add new points to the layer between the existing vertices.

<figure><img src="/files/67DnrWrKk7pKQUT4n8ny" alt="" width="188"><figcaption></figcaption></figure>

{% hint style="info" %}
Hint vertices (pink-filled circles) are a quick and easy way to add complexity and detailed edges to the geometry of existing features.
{% endhint %}

For lines, tap on the feature and then tap **Edit geometry**. Then you can select any endpoint vertex and tap on the **Extend** button at the top of the screen.

<figure><img src="/files/wMJa3WlTGhKTIaNVMsHS" alt="" width="375"><figcaption></figcaption></figure>

#### Deleting features

1. Tap on the feature from the map view
2. Tap on the edit icon <img src="/files/SJtCf8Zc7YTMdwMFqcOz" alt="" data-size="line"> in the popup panel
3. Tap on the **...** in the edit panel
4. Tap **Delete feature...**
5. Confirm deletion

<figure><img src="/files/eHAhAAldQuVn4Yts2ey9" alt="" width="188"><figcaption></figcaption></figure>

## Additional settings

{% hint style="info" %}
Looking for a complete tour of the app? Check out [Tour the Field App](/field-app/tour-the-field-app) next.
{% endhint %}

### Location tracking

The Field App can connect to your device's GPS setting to contribute to the map based on your precise location, which updates in real time. The location tracking works when drawing all geometry types: points, lines, and polygons. So you can add points and trace paths based on your location.

You can access this setting by tapping the location icon ![](/files/NvlZETRn3V2SGPWJAIb7) on the bottom-right of the screen. The first time you enable this you will see your device ask for permission to use your location.

<figure><img src="/files/yIREfKd0O91mToWHSu4v" alt="" width="188"><figcaption></figcaption></figure>

When location tracking is enabled the icon will be a solid blue <img src="/files/k3xlqLHdMJQahB9MefWU" alt="" data-size="original"> and your location will appear on the screen as a blue dot.

<figure><img src="/files/z3ethJDc8zGDQFbUgI9C" alt="" width="188"><figcaption></figcaption></figure>

While collecting point, line, or polygon data, you can use location tracking to snap the vertex to your current location. While drawing on the map, tap the location icon to snap the crosshairs to your location. You will see location accuracy indicator in blue at the top of your screen. Tapping on the accuracy indicator will show you more details on GPS accuracy.

<div><figure><img src="/files/N4HNjwOxcYRIv3hPsjYc" alt=""><figcaption></figcaption></figure> <figure><img src="/files/JZLTF1uWTxgXl3jeQFVX" alt=""><figcaption></figcaption></figure> <figure><img src="/files/nfsfnLNUsuemfGw4Hokz" alt=""><figcaption></figcaption></figure></div>

Note: location tracking is only available while creating features, not while editing existing ones. This prevents accidentally destroying geometry if you're far from the feature you're editing

## Frequently asked questions

<details>

<summary>What plans have access to the Field App?</summary>

The Field App is available on all paid plans. Professional and Enterprise both include the full set of field features:

* Mobile data collection
* Adding geotagged photos
* Data editing
* Survey forms with branching logic
* Offline support

Members with Viewer seats can use the Field App to view maps shared with them. To collect or edit data in the field, a member needs a Full Access seat.

</details>

<details>

<summary>What's the difference between viewing a map on my mobile browser versus the Field App?</summary>

Both experiences are optimized for mobile, but the Field App offers the best mobile experience of Felt maps. We generally recommend downloading the app for Felt maps on mobile.

The Field App also offers features that aren't available in the mobile browser:

* Photo capture for comments
* Surveys and data collection
* Offline support

</details>

<details>

<summary>How does sharing work on mobile?</summary>

Anyone viewing maps in the Field App needs to have a Felt account, so they should be invited to the map or to your Felt workspace.

Public sharing (access for anonymous viewers via map link) allows viewers to open the map on desktop or mobile browsers.

</details>

<details>

<summary>Can I create new maps in the Field App?</summary>

No, the mobile app is optimized for field work and data collection. To create and design maps, you'll need to use Felt's web app on a tablet or desktop.

</details>

<details>

<summary>What are the key differences between the desktop and mobile experience for Felt admins and editors?</summary>

There are a few key differences to outline:

* The desktop interface has pink **Edit** /**Done** buttons at the top of the screen to toggle into edit mode, while the mobile experience does not have this toggle.
* A toolbar is visible at the top of the screen while editing on desktop, but the mobile toolbar sits within the pink plus button at the bottom right of the screen for editors.
* The legend sits on the left-hand side of the screen, while the legend on mobile sits in the bottom panel of the view.
* The desktop editing experience requires internet connectivity, while mobile supports offline viewing and editing mode.

Legend interactions, and workspace navigation experiences are very similar across all platforms.

</details>

<details>

<summary>What types of data can I collect with the Field App?</summary>

On Professional and Enterprise plans you can collect point, line, or polygon data with the Field App. For any of these features you can collect text fields, dates, date time, numbers, true/false, and images.

Any member with a Full Access seat can add comments from the Field App, and members with Contribute or Edit permission can add annotations. Comments can tag existing features (points, lines, or polygons). Members with Contribute or Edit permission can attach photos to comments.

</details>

<details>

<summary>How can I use the legend on mobile?</summary>

The legend is fully interactive on mobile, and so are layer components. For more information see [Tour the Field App](/field-app/tour-the-field-app#bottom-panel)

</details>

<details>

<summary>Can I work offline in the Field App?</summary>

Yes. Open a map, then open the **Felt menu**, choose **Offline areas**, and **Download offline area** to download it to your device before heading into the field. You can then view the map, collect and edit data, add annotations, and comment without a connection, and your changes sync automatically when you reconnect. Working with offline areas requires an Editor or Contributor license (on legacy plans) or a Full Access seat (on current plans). For the full walkthrough and what to keep in mind, see [Offline support](/field-app/offline-support).

</details>

<details>

<summary>When should I use comments vs data collection?</summary>

Use **data collection** when you need the information to persist as a feature, collect data in a consistent format across your team, manage assets, and create datasets that need to be analyzed in spatial reports. Data collection creates layers in Felt.

Use **comments** when you need to communicate quickly, flag something temporarily, or share observations that don't need to be part of your permanent dataset

</details>

<details>

<summary>How do permissions work with the Field App?</summary>

Members with **View** permission can:

* Navigate the workspace projects, folders, and maps on mobile
* View maps
* Search on maps
* Change basemap
* Interact with the legend
* Utilize table view
* Read comments
* Post, edit, and delete their own comments, and comment on features *(requires a Full Access seat — Viewer seats can read comments but can't post them)*
* Use Find, Measure, and Spatial filter extensions. Custom AI extensions are Enterprise only.

Members with **Contribute** permission can do everything View permission allows plus:

* Draw annotations
* Add photos to comments
* Draw new features
* Edit existing features
* Collect and edit data offline on saved maps

Members with **Edit** permission can do everything Contributors can do plus:

* Manage map sharing

Offline support follows these same rules on maps saved for offline use: anyone can view offline, members with a Full Access seat can comment, and members with Contribute or Edit permission can also collect and edit data offline. See [Offline support](/field-app/offline-support).

</details>

<details>

<summary>How do I draw a circle with the Field App?</summary>

Felt supports drawing circles for annotations, measure, and spatial filter extensions. Tap the map to set a center point, then drag your finger across the screen to set the radius and adjust as needed.

</details>

<details>

<summary>Are custom extensions available on mobile?</summary>

Yes, custom extensions are supported on the mobile version of Felt maps.

</details>

<details>

<summary>Does Felt support deep linking?</summary>

Yes, when the Field App is installed, tapping on a map link on mobile (from an email, slack message, etc) will automatically open the map in the Field App.

</details>


# Tour the Field App

Explore the Field App interface with this guided tour of essential features.

The Field App brings Felt's intuitive interface to your mobile device with a layout designed for touch navigation. This guide walks you through the app's main interface elements, from workspace navigation to map controls, so you can quickly find what you need whether you're in the field or on the go.

## Navigating the app

The default view of the app will take you to Recents, which are the Felt maps you've viewed recently. This is the home view of the app.

<figure><img src="/files/3vCu3rBoORM7pDsrZd3F" alt=""><figcaption></figcaption></figure>

The workspace views of the app consist of the following sections and controls:

* Account level controls
* Workspace view controls
* Map management
* Help resources

### Account controls

* Tap **Felt** in the top-left to return to the app home view.
* Tap your avatar to go to your account settings and log out.
* Tap the <img src="/files/x8snEeL7UNTTdE8NTa4n" alt="" data-size="line"> menu (top-left) to navigate the workspace. Use this menu to switch workspaces, view your Drafts, view [Workspace Settings](/administration/workspaces-and-projects#workspace-settings), or view projects within the workspace.

<figure><img src="/files/GVb6mTtwwjxTVCPLjkW7" alt="" width="188"><figcaption></figcaption></figure>

***

### Workspace views

<figure><img src="/files/9UZfAMKtK1DmjzE2zB4A" alt="" width="375"><figcaption></figcaption></figure>

* Tap the recents dropdown filter to change what maps are shown

  <figure><img src="/files/wIqZ6gmKqRI0Kisgevoc" alt="" width="375"><figcaption></figcaption></figure>

  * **My recent maps** shows only recently viewed maps that you own
  * **Recent in workspace** shows your recently viewed maps that belong to the current workspace
  * **All recent maps** show all recently viewed maps across workspaces

***

### Map management

Editors can manage maps on mobile similarly to desktop. Next to every map is a **...** menu where you can:

* Copy map URL
* Duplicate the map
* Move the map
* Delete the map

***

### Help menu

On all workspace-level views, you will also see the help menu ![](/files/G1szjFPAqd8RIWK1LGie)on the bottom-right of the screen. Use this button to access the help center, [developer docs](https://developers.felt.com/), [video tutorials](https://www.youtube.com/@feltmaps), [email support](mailto:support@felt.com), [map gallery](https://felt.com/gallery), [keyboard shortcuts](/getting-started/keyboard-shortcuts), or submit feedback.

<figure><img src="/files/5YxsSVHPnLpDZb9Zsqpn" alt="" width="188"><figcaption></figcaption></figure>

## Navigating a map

Tap on a map from the workspace view to open the map view. You will see the map with controls on the top and bottom portions of the screen.

<figure><img src="/files/dNWUQNwH86y8uFGsYull" alt=""><figcaption></figcaption></figure>

The map views of the app consist of the following components and controls:

* Felt menu and Map tools
* Location and add menu
* Bottom panel

The controls at the top of the screen are higher-level settings and let you control what you see in the main view. The bottom panels host detailed information viewable on the map, including the legend and feature popups.

### Map tools

The top navigation bar contains controls arranged for smaller mobile screens.

<figure><img src="/files/Rhg5y1Hr6g782osl5d2H" alt=""><figcaption></figcaption></figure>

* Tap the back button ![](/files/bqfGqjFumqWfH2qEkDh5) to return to the app home view.
* **Felt** menu has the same options as desktop
* Your presence appears on the map with your avatar highlighted in color
* Search <img src="/files/OYjfRGQ2CbmSfswRn4Sg" alt="" data-size="line"> lets you find locations and features on the map
* **...** menu shows the following map-level settings

  <figure><img src="/files/1FKTDau826aDpkm4PiOX" alt="" width="162"><figcaption></figcaption></figure>

  * **Share -** Configure map permissions, add collaborators, change roles
  * **Basemap** - Switch basemaps (in View mode changes are only for your view, not everyone's default view of the map)
  * **Table** - View all features in a table format (you can tap on rows to zoom to them on the map)
  * **Comments** - View a list of all comments to edit, resolve, and delete comments

***

### Location tracking and add button

The bottom of the map view contains the zoom level, scale bar, attributions, location tracking, and map actions. Map actions includes comments, drawing annotations, and data collection.

<figure><img src="/files/FcKLcBN4h7YyrEf8zfuc" alt="" width="375"><figcaption></figcaption></figure>

**Location tracking**

Location tracking ![](/files/NvlZETRn3V2SGPWJAIb7) lets the Field App find and track your location on the map when doing field collection. You can snap comments and data collection points/vertices to your location with this feature, ensuring accurate data collection workflows. See [Getting started](/field-app/getting-started#location-tracking).

**Add button**

Actions <img src="/files/4BCexrU4qpRdNIVGnveg" alt="" data-size="line"> or <img src="/files/AcoEaypEJjGGY0IUlKgq" alt="" data-size="line"> are where you can add comments, annotations, or new features to layers on the map.

Members with Contribute or Edit permission will see a plus sign <img src="/files/4BCexrU4qpRdNIVGnveg" alt="" data-size="line">, while members with View permission (and a Full Access seat) will see a comment button <img src="/files/AcoEaypEJjGGY0IUlKgq" alt="" data-size="line">. See [Getting started](/field-app/getting-started#comment) and [Getting started](/field-app/getting-started#data-collection) to learn more.

{% columns %}
{% column %}

<p align="center"><strong>Contribute / Edit version</strong></p>

<figure><img src="/files/FcKLcBN4h7YyrEf8zfuc" alt=""><figcaption></figcaption></figure>
{% endcolumn %}

{% column %}

<p align="center"><strong>View version</strong></p>

<figure><img src="/files/TreqI6DcenCk9CMGyoa1" alt=""><figcaption></figcaption></figure>
{% endcolumn %}
{% endcolumns %}

{% hint style="info" %}
**Options available within this menu depend on your permission on the map:**

* Any member with a Full Access seat can leave comments
* Members with **Contribute** or **Edit** permission can add annotations, draw new features, edit features, and attach photos to comments
* Find, Measure, and Spatial filter extensions appear in the Legend panel. Custom AI extensions are Enterprise only.
  {% endhint %}

***

### Bottom panel

The bottom panel is where further details about the map are shown. The default view for the bottom panel is the legend, and when opening any map in the Field App the legend appears in a collapsed state. The bottom panel gets replaced with feature popups when a specific feature is tapped. The bottom panel also shows the table, share menu, comments, basemap switcher, and data collection details.

{% hint style="info" %}
Pro tip: tap on the background or away from the bottom panel to return the view to the default panel, which is the legend in a collapsed state.
{% endhint %}

#### **Legend**

Similar to desktop, the legend is interactive on the Field App. It shows the map title, visible layers, and layer components. Pre-built extensions (Find, Measure, Spatial filter) and custom AI extensions configured for the map appear at the top of the legend panel.

<figure><img src="/files/dCzWkOSOJmgw7nyW26tS" alt="" width="188"><figcaption></figcaption></figure>

Tapping on layers in the legend opens a menu to:

* Show or hide the layer
* Zoom to the layer
* Interact with components
* Control nested layers (within layer groups)

#### **Feature popups**

Tap any feature on the map to see its popup and details in the bottom panel.

<figure><img src="/files/2j11redd9HLpk2JmsluF" alt="" width="188"><figcaption></figcaption></figure>

From the feature popup panel you can:

* View the data attributes and details about the feature
* Add comments (**...**)
* Edit the feature's attributes or geometry <img src="/files/SJtCf8Zc7YTMdwMFqcOz" alt="" data-size="line">

You can switch back to the legend by tapping on the popup feature's title and selecting **Legend** from the menu:

<figure><img src="/files/MiYqIalDEmaUS7SYWVny" alt="" width="188"><figcaption></figcaption></figure>

#### **Table**

You can open the table from the toolbar's **...** expand menu. By default the panel will open in full size, but you can minimize it to half screen or collapsed to see more of the map.

<figure><img src="/files/mymFpU7Rf31EX1rue2Et" alt="" width="188"><figcaption></figcaption></figure>

Within the table panel you can:

* Double-tap to zoom to the feature on the map
* Tap the layer dropdown to switch to view the table for other layers

  <figure><img src="/files/QfFu0LfVPdsqSYjBuold" alt="" width="188"><figcaption></figcaption></figure>
* Filter the table to features only in current view

  <figure><img src="/files/yVftOyaRoNNJep9VvWtE" alt="" width="375"><figcaption></figcaption></figure>
* Search for specific features

  <figure><img src="/files/dbQ3lQ9vQqvqpKWQIe49" alt="" width="375"><figcaption></figcaption></figure>

#### Bottom panel states

When the bottom panel is displaying the legend, feature popups, or table view it can be viewed in a few different visibility states, which impacts how much of the bottom panel is shown with respect to the map.

<table data-header-hidden><thead><tr><th width="251.4375" align="center"></th><th align="center"></th></tr></thead><tbody><tr><td align="center">Collapsed (minimized)</td><td align="center"><img src="/files/WsGyYN5M7QF5mZB9LC8X" alt="" data-size="original"></td></tr><tr><td align="center">Half size (partial view)</td><td align="center"><img src="/files/fyjwRrTOGzfN8sFelT7u" alt="" data-size="original"></td></tr><tr><td align="center">Full size (with scrolling)</td><td align="center"><img src="/files/8QuwuTIpbkINzggNDYFd" alt="" data-size="original"></td></tr></tbody></table>

## Permissions

Your view and capabilities in the Field App depend on your permission on the map. In the app home view, members **without Edit permission on the workspace** will see the following notice:

> You have limited access in this workspace. To create or edit maps, ask your admin for full access.

Meanwhile, members with **Edit** permission will see a notice about creating maps, because the mobile app is optimized for field work. To create maps and upload data, switch to Felt's web app on a tablet or desktop.

> To create maps and upload data, open Felt on desktop.

**Members with View permission** will see a comment button <img src="/files/AcoEaypEJjGGY0IUlKgq" alt="" data-size="line"> if they hold a Full Access seat, and can do the following:

* Navigate the workspace projects, folders, and maps on mobile
* View maps
* Search on maps
* Change basemap
* Interact with the legend
* Utilize table view
* Read comments
* Post, edit, and delete their own comments, and comment on features *(requires a Full Access seat — Viewer seats can read comments but can't post them)*
* Use Find, Measure, and Spatial filter extensions. Custom AI extensions are Enterprise only.

**Members with Contribute permission** will see a plus button <img src="/files/4BCexrU4qpRdNIVGnveg" alt="" data-size="line"> on their maps. They can do everything View permission allows plus:

* Draw annotations
* Add photos to comments
* Draw new features
* Edit existing features

**Members with Edit permission** will see a plus button <img src="/files/4BCexrU4qpRdNIVGnveg" alt="" data-size="line"> on their maps. They can do everything Contributors can do plus:

* Manage map sharing
* Create and delete layers

## Frequently asked questions

<details>

<summary>What plans have access to the Field App?</summary>

The Field App is available on all paid plans. Professional and Enterprise both include the full set of field features:

* Mobile data collection
* Adding geotagged photos
* Data editing
* Survey forms with branching logic
* Offline support

Members with Viewer seats can use the Field App to view maps shared with them. To collect or edit data in the field, a member needs a Full Access seat with Contribute or Edit permission.

</details>

<details>

<summary>Can I create new maps in the Field App?</summary>

No, the mobile app is optimized for field work and data collection. To create and design maps, you'll need to use Felt's web app on a tablet or desktop.

</details>

<details>

<summary>What are the key differences between the desktop and mobile experience for Felt admins and editors?</summary>

There are a few key differences to outline:

* The desktop interface has pink Edit /Done buttons at the top of the screen to toggle into edit mode, while the mobile experience does not have this toggle.
* A toolbar is visible at the top of the screen while editing on desktop, while map tools exist in the pink plus button at the bottom right of the screen and top right **...** menu for editors.
* The legend sits on the left-hand side of the screen, while the legend on mobile sits in the bottom panel of the view.
* Custom extensions run on mobile as well as desktop — they appear in the legend panel on the Field App.

Legend interactions, comments, and workspace navigation experiences are very similar across all platforms.

</details>

<details>

<summary>What's the difference between permissions in the Field App?</summary>

**View permission** lets members navigate workspaces, view maps, search, change basemaps, interact with the legend, use table view, and read comments. Posting comments requires a Full Access seat — members with one see a comment button <img src="/files/AcoEaypEJjGGY0IUlKgq" alt="" data-size="line"> on the map view. Members with View permission can use Find, Measure, and Spatial filter extensions.

**Contribute permission** adds the ability to draw annotations, draw new features, edit existing features, and add photos to comments. On map views, Contributors see an add button <img src="/files/4BCexrU4qpRdNIVGnveg" alt="" data-size="line">.

**Edit permission** does everything Contribute does plus map sharing management.

Offline support follows these same rules: anyone can view a saved map offline, members with a Full Access seat can comment, and members with Contribute or Edit permission can also collect and edit data offline. See [Offline support](/field-app/offline-support).

Custom AI extensions are Enterprise only. For details on seats and permissions, see [Seats](/administration/licenses) and [Permissions](/administration/felt-permissions).

</details>

<details>

<summary>How do I switch between different workspaces?</summary>

From the home view, tap the menu icon (☰) in the top-left corner to navigate between workspaces, view workspace settings, or access projects within your current workspace.

</details>

<details>

<summary>When viewing map, how do I quickly switch between legend, popups, and tables?</summary>

At the top of the bottom panel there is a dropdown you can tap on to quickly switch to a different view in this panel.

* Viewing legend: dropdown will have the map title
* Viewing tables: dropdown will say **Table**
* Viewing popup: dropdown will have the feature's popup title

<figure><img src="/files/mq9lYAT2tJTLg3KLCPsW" alt="" width="188"><figcaption></figcaption></figure>

</details>

<details>

<summary>Where can I find the find, measure and spatial filter tools?</summary>

These tools are located in the legend panel at the bottom of the map view.

</details>

<details>

<summary>How do I get back to the legend after opening a feature popup?</summary>

Either tap on the popup title and select **Legend** from the menu, or tap on the background away from the bottom panel.

</details>

<details>

<summary>Can I manage maps (duplicate, move, delete) from the mobile app?</summary>

Yes, editors can manage maps on mobile. Tap the **...** menu next to any map to copy the URL, duplicate, move, or delete the map.

</details>

<details>

<summary>What are the different "Recent" filter options?</summary>

You can filter to show "My recent maps" (only maps you own), "Recent in workspace" (recently viewed maps in the current workspace), or "All recent maps" (all recently viewed maps across all workspaces).

</details>

<details>

<summary>Is there a max size limit for uploading images to comments or features?</summary>

The max size an image can be is 20MB.

</details>


# Guide: field data collection

Learn best practices on running field data collection by building a GIS survey from scratch.

With the Field App you can take any Felt map into the field and turn your phone into a complete data collection tool. Everything captured in the field is instantly synced to the map for all team members to see, transforming field observations into actionable insights in seconds.

This guide gives you the key steps to design a survey for data collection and feed this collection directly onto a live map. Streamlining the collection and reporting allows your organization to collect field data or assets and report out actionable insights all in one place.

The key benefits of using Felt for GIS survey collection are:

* **Get started in 3 steps:** Felt's interface is simple and allows you to skip complicated set up requirements or permission structures.
* **Standardized data collection:** Felt allows you to create surveys from scratch to gather data for inspections, tracking inventory, or surveying assets while ensuring data consistency across your organization.
* **Location mapping with precision:** The Field App allows you to access and track your position on the map, as you move. Use accurate GPS tracing to record data.
* **Document conditions with photo capture:** Geotagged photos can be attached directly to features via surveys, or on standalone comments.
* **GIS tools at your fingertips:** Attribute tables, tabular or spatial filters, search, and measure tools let your team record data and make decisions with confidence.
* **Connected across teams and sites:** Updates in the field happen live on the map for everyone else, allowing you to coordinate seamlessly between the field and office on a single map.

## Step 1: Set up the survey map

{% hint style="info" %}
This step happens on desktop by an editor or admin in Felt.
{% endhint %}

#### Start with mapping existing data

Use Felt’s [Upload Anything](/upload-anything/files) tool to visualize existing data on the map. Use our [Styling](/layers/styling) guides to symbolize the data you need and add [Dashboard components](/dashboards-and-apps/components) to create interactive widgets in the legend. Components will allow you to report out on the status of assets on the map and track real-time updates.

**Pro tips:**

* Don't have any data? Try Felt’s [Global Library](/data-sources/global-library)
* Consider changing the [Basemaps](/layers/basemaps)
* Add high resolution imagery (see [Raster and imagery](/upload-anything/raster-and-imagery))

#### Create a survey to track field work

<figure><img src="/files/rY9rx0xBTIHUe7yJFHF0" alt="" width="563"><figcaption></figcaption></figure>

[Create a new layer](https://help.felt.com/layers/editing-layers#creating-new-layers) in Felt to track field assets on the ground. This layer will have a consistent structure and table of attributes. The team in the field will add features to this layer using the Field App.

1. Select the dropdown next to the pencil icon <img src="/files/cuSzERrmS58CwsVCOv7L" alt="" data-size="line">in the toolbar and click **+ Create layer**

   <figure><img src="/files/NXmf7n69myE91PfQmeKQ" alt="" width="355"><figcaption></figcaption></figure>
2. Give the new layer a name for the assets you want to track
3. Add the attributes to track with each asset. For numeric or text attributes, use [surveys](https://help.felt.com/layers/editing-layers#surveys) to create dropdown values for that column.
4. Continue adding attributes with **+ Add attribute**
5. Click **Update layer** when you are finished setting up all attributes you want to track for data collection

**Pro tips:**

* No need to start from scratch — you can also turn any existing layer into a structured survey via the [Edit attributes](/layers/editing-layers#editing-attribute-columns) modal.
* Use dropdowns and required fields to enforce consistent data collection
* Use [show if conditions](/layers/editing-layers#show-if-conditions) to build multi-step surveys that only ask follow-up questions when they're relevant — for example, only asking for damage severity when damage was observed

#### Make it a map

Your field crew might need to take [measurements](/developer-platform/extensions#measure) in the field, like the length of a trail segment they're editing or the area of a damaged section. And while the map tells you where work is happening, [Dashboard components](/dashboards-and-apps/components) tell you how much. Without them, other teams must count features manually or open the attribute table to get a full status update. Now that all the data is configured, we can apply the finishing touches to the map.

1. Click on the asset layer in the legend and select Components on the layer panel
2. Click **Add Component** and select **Statistic**

   <figure><img src="/files/rxsgcbIvIQsWVGohG6ol" alt="" width="375"><figcaption></figcaption></figure>
3. Rename this Feature count statistic to "Total Assets" to summarize the working dataset.

   <figure><img src="/files/xuDT8qLydXuBVkUt5YyY" alt="" width="375"><figcaption></figcaption></figure>
4. Next, we'll add a measurement tool to the map. Click **Developer Platform** <img src="/files/doi2WI1BAxPPUCmw5iPD" alt="" data-size="line"> in the toolbar
5. Select the option for Measure. This tool will live at the top of the Legend for all viewers
6. Select the types of measurements you want to include for field teams

   <figure><img src="/files/KXsMF55j8QDdHG4fqyRY" alt="" width="354"><figcaption></figcaption></figure>

**Pro tips:**

* Toggle the setting for "Update based on view" in your statistic component to get a dynamic count from the current viewport
* Add another statistic component to summarize a key metric the team is collecting
* Add a filter or bar chart dashboard component to summarize the data collection in different ways (by status, by type, etc)
* Consider adding other [Extensions](/developer-platform/extensions), like Find or Spatial filter
* Review [Map settings](/dashboards-and-apps/map-settings) to control viewport limits and table view settings

## Step 2: Invite your field team

{% hint style="info" %}
Anyone with Edit permission can invite others to a map.
{% endhint %}

1. Click Share in the top right corner
2. Enter the email addresses for your field crew
3. Give them Contribute or Edit permission so they can add and modify data
4. Click Invite

They'll each get an email with a link to the map. When they tap it on their phone, it opens directly in the Field App.

## Step 3: Working in the field

{% hint style="info" %}
This step happens in the mobile Field App by an editor or admin in Felt.
{% endhint %}

#### Open the map

1. [Download the Field App](https://felt.com/download-mobile) and open the survey map
2. Tap the location button <img src="/files/NvlZETRn3V2SGPWJAIb7" alt="" data-size="line"> at the bottom of the screen to center the map on your location. If you need to jump to a different area, use the Search bar <img src="/files/OYjfRGQ2CbmSfswRn4Sg" alt="" data-size="line"> to find it by address or place name.
3. Swipe up from the bottom of the screen to see all the layers on the map. Everything the project manager set up is right here.

{% hint style="info" %}
For more information on navigating the Field App, see [Tour the Field App](/field-app/tour-the-field-app).
{% endhint %}

{% hint style="info" %}
Heading somewhere without reliable cell service? Before you leave, open the map, then open the **Felt menu**, choose **Offline areas**, and **Download offline area** to download it to your device. You can then collect and edit data without a connection, and everything syncs automatically when you reconnect. See [Offline support](/field-app/offline-support).
{% endhint %}

#### Collect data

1. Tap the <img src="/files/4BCexrU4qpRdNIVGnveg" alt="" data-size="line"> button in the bottom right corner
2. Select the target asset layer from the list
3. Tap the Add Point button to drop a point or vertex underneath the crosshair. To snap the crosshair to your current location, tap on the location icon <img src="/files/dlGkFL8r1mTT26Q2oIFX" alt="" data-size="line"> in the bottom right

   <figure><img src="/files/pdO2FfLh3WZMWGaC22UM" alt="" width="197"><figcaption></figcaption></figure>
4. When done drawing, fill out the attribute form that appears with the fields to collect. These are the same fields that were configured in Step 1.
5. Tap Done when finished.

The newly reported asset will appear on everyone's map immediately, including all attributes and photos collected. Components and symbology will be updated immediately.

#### Update attributes

You can update attributes for features on the map, such as the service status of a feature to change the progress. When updating attributes that are used in symbology or components in the legend, your changes will be reflected instantly on the map for all devices viewing the map.

1. Tap a feature to select it and see its current attributes
2. Tap Edit ![](/files/SJtCf8Zc7YTMdwMFqcOz)
3. Change the attribute values to update the information
4. Tap Done in the top right

#### Fix or correct data

You can also edit the geometry of any existing features on the map: move points to the correct location, redraw trail segments, and correct plot drawings. Changes will be reflected instantly on all devices viewing the map.

1. Tap on a feature to edit it
2. Tap Edit <img src="/files/SJtCf8Zc7YTMdwMFqcOz" alt="" data-size="line">
3. Tap on a vertex to select it
4. Pan the map to adjust the vertex location, or tap ![](/files/4wnLS06lAHoOW5VjgItm) to delete the vertex
5. Tap Done in the top right

## Next steps

### See it in action: LED park upgrade webinar

To show you how the Field App works in practice, [this webinar](https://felt.com/webinars/bringing-the-full-power-of-gis-to-the-field-with-felts-field-app) walks through a real use case: a city preparing for an LED upgrade across its parks.

Scenario: The project manager needs to send field crews out to verify the current condition of every light pole, update any inaccurate trail data, and document damage they find along the way. By the end of each day, she needs to send a summary report to city leadership.

### Visualize progress with styling

Color-coding your data collection by attribute is what turns a map from "where things are" into "what's happening." For field collection work this can be critical: your crew needs to visually identify which assets to work on and you need to monitor progress without clicking on every feature. You can style your newly created assets layer by a "status” or “progress” attribute to easily visualize the status of data collected from the field.

1. Open the map in edit mode on desktop
2. Click on the asset layer
3. On the style panel, click on the Type dropdown (the dropdown will say "Simple")
4. Select the Categorical option
5. Click on Color by dropdown and select the column that represents your status or progress.
6. This will update the map and legend.
7. Continue styling by customizing colors, symbols, size, transparency, etc. See [Vector layers](/layers/styling/vector-layers) for a comprehensive guide on style settings.

<figure><img src="/files/rpMDnLWAyfYKTHag7mi5" alt="" width="563"><figcaption></figcaption></figure>

## Frequently asked questions

<details>

<summary>What file formats can I upload for the initial data layer?</summary>

Felt's [Upload Anything](/upload-anything/files) tool supports a wide range of geospatial formats including Shapefiles, GeoJSON, KML, KMZ, GPX, GeoPackage, and CSV files with latitude/longitude columns. For a complete list of supported formats, see our [Upload Anything](/upload-anything/files) guide.

</details>

<details>

<summary>Can I export the data collected in the field?</summary>

Yes, you can export data from any layer at any time. Click on the layer in the legend, open the data panel, and select Export. You can download your field-collected data in GeoJSON, GeoPackage, or CSV formats.

</details>

<details>

<summary>How many photos can be attached to a single feature?</summary>

You can attach multiple photos to a single feature through the photo attribute field. Photos are geotagged automatically and stored with the feature. Keep in mind that large numbers of high-resolution photos may impact sync times in areas with slow internet connections.

</details>

<details>

<summary>How do I ensure data consistency across my field team?</summary>

Use surveys with dropdown values for text and numeric attributes. This forces field users to select from predefined options rather than typing free text, which eliminates typos and ensures standardized data entry. Configure these dropdowns during the layer setup in Step 1.

</details>

<details>

<summary>Can viewers use the Field App, or is it only for editors?</summary>

Everyone with a Felt account, including members with Viewer seats, can download and log in to the Field App. Viewer seats can see the map and real-time updates through the Felt web app or mobile app, but cannot add or edit features. If someone needs to collect data in the field, they need a Full Access seat with Contribute or Edit permission on the map.

</details>

<details>

<summary>When a feature's status is updated in the field, do others see that update immediately?</summary>

Yes, all updates made in the Field App sync instantly to the map for all team members. This includes attribute changes, new features, photos, and geometry edits. Dashboard components and symbology will also update in real-time.

</details>

<details>

<summary>What if my field team works in areas without internet?</summary>

Download an offline area before heading out. Open the map, then open the **Felt menu**, choose **Offline areas**, and **Download offline area**, then select the area to download. Your crew can then collect features, edit attributes, attach photos, annotate, and comment without a connection. Those changes are saved on the device and sync automatically the next time they're back online. Working with offline areas requires an Editor or Contributor license (on legacy plans) or a Full Access seat (on current plans). See [Offline support](/field-app/offline-support) for details and things to keep in mind.

</details>

<details>

<summary>Do I need to set up Dashboard components, or can I skip that part?</summary>

Dashboard components are optional but highly recommended. Without them, your team would need to manually count features or open the attribute table to get status updates. Components like Statistic and Bar chart give you instant visibility into collection progress.

</details>

<details>

<summary>How do field users snap a point to their exact GPS location?</summary>

When adding a feature, tap the location icon in the bottom right corner of the screen. This will snap the point or vertex to your current GPS position rather than manually placing it on the map.

</details>


# Offline support

Save Felt maps to your device with the Field App so you can view, collect, and edit data without connectivity, then sync automatically when you reconnect.

The Field App lets you take your maps into the field without a connection. Save a map to your device ahead of time, work fully offline while you're out of cell range, and the app syncs your changes automatically the next time you're back online.

Offline support is available in the Field App on both iOS and Android. Make sure you're on the latest version of the app from the [App Store](https://apps.apple.com/us/app/felt-maps-field-surveys-gis/id6754033379) or [Google Play store](https://play.google.com/store/apps/details?id=com.felt.mobile).

{% hint style="info" %}
Working with offline areas requires a paid editing seat: an **Editor or Contributor** license on legacy plans, or a **Full Access** seat on current plans.
{% endhint %}

## Download an offline area

1. Open the map you want to take into the field.
2. Open the **Felt menu**, choose **Offline areas**, then **Download offline area**.
3. Drag the rectangle on the map to choose the area you want to download, then start the download.
4. You'll see the download progress, and the status changes to **Downloaded** when it's ready.

The app downloads the map's data layers and the standard Felt basemaps for the area you selected, so you can view and switch basemaps offline.

You can download more than one offline area. The app home is also browsable offline, so your downloaded maps are available even without a connection.

## What you can do offline

Once a map is saved, you can keep working on it without a connection. What you can do follows the same [seat and map permissions](/field-app/getting-started#contribute) as when you're online: anyone can view, members with a Full Access seat can comment, and members with Contribute or Edit permission can also collect and edit data.

Offline you can:

* Add new features to layers
* Edit feature attributes
* Attach photos to features
* Add annotations
* Add comments
* View, pan, and zoom the map, including zooming in beyond the saved detail level
* Tap features to view and query their attributes
* Browse, sort, and search the data table

## How syncing works

Any changes you make offline are saved on your device and queued to upload. Your edits are durable: they survive closing or force-quitting the app, so nothing is lost if you put your phone away before reconnecting.

When your device comes back online, the app syncs automatically:

* Your queued changes upload to the map for everyone to see.
* The map pulls in changes other people made while you were offline.

A syncing indicator shows while your changes are still uploading. Wait until syncing finishes before closing the map to make sure everything, including photos, has been sent.

## Things to keep in mind

* **An offline map is a point-in-time snapshot.** Layers or features added to the map after you saved it won't appear offline until you save the map again.
* **Custom basemaps aren't available offline.** The standard Felt basemaps are included so you can still switch between them in the field.
* **Some functionality is disabled while offline.** Certain styling and editing tasks aren't available without a connection, such as styling layers and uploading data.

## Troubleshooting

* **Changes haven't synced.** Reconnect to the internet and open the map. Watch the syncing indicator and keep the app open until it finishes.

If you run into anything else, reach out to <support@felt.com>.


# External GNSS receivers

Connect external high-accuracy GPS and GNSS receivers to the Field App on iOS and Android for submeter to centimeter-level positioning.

The Field App works with external high-accuracy GPS and GNSS receivers on both iOS and Android, giving field teams submeter to centimeter-level positioning for data collection, asset mapping, and inspections. If your organization uses professional-grade GNSS hardware, this page explains how it connects to Felt and what to expect on each platform.

## How it works

The Field App receives location data from your mobile device's operating system. When you pair an external GNSS receiver via Bluetooth, the receiver's high-accuracy position replaces the device's built-in GPS. The Field App then uses that improved position for all data collection, feature placement, and location tracking — no additional configuration is needed inside Felt.

This means Felt is compatible with a wide range of Bluetooth GNSS receivers from leading manufacturers. If your receiver provides location data through the standard platform location services (Core Location on iOS, Location Services on Android), the Field App will use it automatically.

## Supported GNSS receivers on iOS

On iOS, Bluetooth GNSS receivers must be part of Apple's MFi (Made for iPhone/iPad) program to provide location data to apps through Core Location. The following MFi-certified receivers are compatible with the Field App on iPhone and iPad:

**Eos Positioning Systems**

* Eos Arrow Lite
* Eos Arrow 100 / Arrow 100+
* Eos Arrow 200
* Eos Arrow Gold / Arrow Gold+
* Eos Skadi

**Bad Elf**

* Bad Elf Flex
* Bad Elf Flex Mini
* Bad Elf GNSS Surveyor
* Bad Elf GPS Pro+
* Bad Elf GPS Pro
* Bad Elf GPS for Lightning Connector

**Trimble**

* Trimble R1
* Trimble R2
* Trimble R580
* Trimble R780 / R780-2
* Trimble R980
* Trimble R10 Model 2
* Trimble R12 / R12i
* Trimble Catalyst DA2
* Trimble TDC600 / TDC650

**Emlid**

* Emlid Reach RX MFi (MFi-certified batches only; check for the Made for Apple badge on the packaging)
* Emlid Reach RX2
* Emlid Reach RS4 / RS4 Pro

**Juniper Systems**

* Juniper Geode GNS3H
* Juniper Geode GNS3M
* Juniper Geode GNS3S

**Geneq**

* Geneq SXblue II
* Geneq SXblue III

**Leica Geosystems**

* Leica Zeno GG04 plus
* Leica FLX100 plus

**Other**

* Garmin GLO / GLO 2
* Dual XGPS160
* SparkPNT TX2 / Facet FP
* Asteri X1i

{% hint style="info" %}
Non-MFi receivers (such as raw u-blox boards, ArduSimple, or SparkFun RTK kits) cannot provide location data to iOS apps through Core Location. If your receiver is not MFi-certified, it will not work with the Field App on iPhone or iPad.
{% endhint %}

## Supported GNSS receivers on Android

On Android, the Field App works with virtually any Bluetooth GNSS receiver that outputs NMEA sentences, when configured as a mock location provider. This includes all of the receivers listed above for iOS, plus many additional devices.

Android receivers that have been widely used for field data collection include:

* Eos Arrow Lite, Arrow 100, Arrow 100+, Arrow 200, Arrow Gold, Arrow Gold+, Skadi
* Bad Elf Flex, Flex Mini, GNSS Surveyor, GPS Pro+, GPS Pro
* Trimble R1, R2, R580, R780, R780-2, R8s, R980, R10, R10 Model 2, R12, R12i, Catalyst DA2, TDC600, TDC650
* Emlid Reach RX, Reach RX2, Reach RS2+, Reach RS4, Reach RS4 Pro
* Juniper Systems Geode GNS3H, GNS3M, GNS3S
* Leica GG03, GG04, GG04 plus, FLX100, FLX100 plus
* Geneq SXblue II, SXblue III
* Spectra Precision SP30, SP60, SP80, SP85, SP100
* Carlson BRx6+
* Sokkia GCX3
* Garmin GLO
* Dual XGPS150A, XGPS160
* SparkFun RTK Facet, RTK Express, RTK Surveyor
* ArduSimple simpleRTK2B, simpleRTK3B (via Bluetooth Serial Port Profile)

{% hint style="success" %}
This is not an exhaustive list. If your receiver outputs NMEA0183 sentences and can be configured as a mock location provider on Android, it should work with the Field App.
{% endhint %}

## Setting up your receiver

### iOS setup

1. **Turn on your receiver** and make sure it is in Bluetooth pairing mode. Refer to your receiver's user manual for instructions.
2. **Open your device's Bluetooth settings** (Settings > Bluetooth) and wait for the receiver to appear in the list of available devices.
3. **Tap the receiver name** to pair it. Once paired, iOS will automatically use the receiver's position through Core Location.
4. **Open the Field App** and begin collecting data. No additional configuration is needed inside Felt — the app will use the receiver's high-accuracy location.

{% hint style="info" %}
Some receivers require a companion app to configure correction sources (NTRIP, RTK networks) before the receiver can deliver high-accuracy positions. For example, Trimble receivers require Trimble Mobile Manager, Emlid receivers use Emlid Flow, and Eos receivers use Eos Tools Pro. Set up your corrections in the manufacturer's companion app before beginning data collection in Felt.
{% endhint %}

### Android setup

Android requires a few extra steps to route external GNSS data to apps through the operating system.

1. **Pair your receiver** in your device's Bluetooth settings, just as you would on iOS.
2. **Install a companion or helper app** that connects to your receiver and provides its location to Android as a mock location source. Options include:
   * Your receiver manufacturer's companion app (Eos Tools Pro, Trimble Mobile Manager, Emlid Flow, Geode Connect, SXblue Toolbox)
   * A third-party NMEA app such as Bluetooth GPS, Lefebure NTRIP Client, or GNSS Master
3. **Enable Developer Options** on your Android device. Go to Settings > About Phone and tap Build Number seven times to unlock Developer Options.
4. **Set the mock location app.** In Settings > Developer Options, find "Select mock location app" (or "Allow mock locations" on older devices) and choose the app from step 2.
5. **Connect and verify** in the companion app that you are receiving positions from the external receiver.
6. **Open the Field App** and begin collecting data. Felt will now receive the high-accuracy position from your external GNSS receiver.

{% hint style="success" %}
If your receiver needs real-time corrections (RTK or NTRIP), configure the correction source in the companion app before opening Felt. The companion app typically runs in the background while you collect data.
{% endhint %}

## Configuring real-time corrections (RTK / NTRIP)

Many high-accuracy GNSS receivers support real-time kinematic (RTK) positioning through NTRIP correction services. RTK corrections can improve your position accuracy from meter-level to centimeter-level.

Felt does not manage correction sources directly. Configure your RTK or NTRIP connection through your receiver manufacturer's companion app:

| Receiver                       | Companion app          | Platform     |
| ------------------------------ | ---------------------- | ------------ |
| Eos Arrow series               | Eos Tools Pro          | iOS, Android |
| Trimble R-series, Catalyst DA2 | Trimble Mobile Manager | iOS, Android |
| Emlid Reach RX / RS series     | Emlid Flow             | iOS, Android |
| Bad Elf Flex / GNSS Surveyor   | Bad Elf app            | iOS, Android |
| Juniper Geode                  | Geode Connect          | iOS, Android |
| Geneq SXblue                   | SXblue Toolbox         | iOS, Android |
| Leica GG04 / FLX100            | Leica Zeno Connect     | iOS, Android |

Once the companion app is configured and streaming corrections, the improved position flows through to the Field App automatically.

## Frequently asked questions

**Do I need to change any settings in the Field App to use an external receiver?**

No. The Field App receives location from your device's operating system. When an external GNSS receiver is paired and providing location data, the Field App uses it automatically.

**Can I use the receiver manufacturer's companion app at the same time as Felt?**

Yes. On both iOS and Android, the companion app runs in the background while you collect data in the Field App. This is the recommended setup when using RTK corrections.

**What if my receiver isn't on the list?**

On Android, any Bluetooth GNSS receiver that outputs NMEA sentences and can act as a mock location provider should work. On iOS, the receiver must be MFi-certified to provide location data through Core Location. Contact <support@felt.com> if you have questions about a specific receiver.

**Does this work with the Felt web app in a mobile browser?**

The external receiver's position is shared with all apps on the device that use the operating system's location services. If you access Felt through a mobile browser that uses the device's location, the high-accuracy position should be available. For the best field data collection experience, we recommend using the Field App.

**Which receivers support differential corrections (SBAS, RTK, PPP)?**

Most professional-grade GNSS receivers support some form of differential correction. Consumer-grade receivers like the Garmin GLO and Bad Elf GPS Pro support SBAS (free, meter-level corrections). Survey-grade receivers like the Eos Arrow Gold, Trimble R12i, Emlid Reach RX, and Juniper Geode GNS3 support RTK (centimeter-level corrections through a subscription or base station). Refer to your receiver manufacturer's documentation for correction capabilities.

**What accuracy can I expect?**

Accuracy depends on your receiver, correction source, and field conditions. Approximate ranges:

| Receiver type                                                      | Correction  | Typical accuracy |
| ------------------------------------------------------------------ | ----------- | ---------------- |
| Device built-in GPS                                                | None        | 3–5 meters       |
| Consumer Bluetooth GPS (Garmin GLO, Bad Elf GPS Pro)               | SBAS / WAAS | 1–3 meters       |
| Mapping-grade GNSS (Eos Arrow Lite, Emlid Reach RX, Juniper Geode) | SBAS        | Sub-meter        |
| Mapping-grade GNSS with RTK                                        | RTK / NTRIP | 1–10 centimeters |
| Survey-grade GNSS (Eos Arrow Gold, Trimble R12i)                   | RTK / NTRIP | 1–2 centimeters  |

***

Need help setting up your receiver with Felt? Contact our team at <support@felt.com>.


# Data sources

Browse, share, and manage data sources in your Felt workspace — Felt Servers, the Global Library, Cloud sources, and Raster infrastructure.

A **data source** in Felt is a managed, shareable home for datasets that the whole workspace can use. Felt Servers, the Global Library, Cloud sources, and Raster infrastructure sources expose layers that members can preview and add to maps, and carry their own permissions.

<figure><img src="/files/5IlF4JkQ3z21LSUB27Xc" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
Data sources are the shareable, persistent sources that appear across the workspace. If you're working with individual files, URLs, spreadsheets, or QGIS projects on a single map, see [Upload Anything.](/upload-anything/files)
{% endhint %}

## Data source types

* [**Felt Servers**](/data-sources/felt-servers) — Felt-managed workspace catalogs that hold layers you've published from maps. Organized with folders. *Professional includes 1 Felt Server; Enterprise allows unlimited.*
* [**Global Library**](/data-sources/global-library) — Curated datasets from Felt — regional boundaries, census, imagery, basemaps. Free to use and free to store.
* [**Cloud sources**](/data-sources/cloud-sources) — Live connections to your databases, warehouses, object storage, and OGC/ESRI services. *Enterprise plan.*
* [**Raster infrastructure**](/data-sources/raster-infrastructure) — Streaming access to Cloud Optimized GeoTIFFs and STAC catalogs from your own cloud storage. *Enterprise plan.*

## Browsing data sources

You can browse your workspace's data sources from two places:

* **Workspace homepage.** The **Data sources** section on the workspace homepage lists the Global Library and every Felt Server, Cloud source, and Raster infrastructure source in the workspace you're permitted access to.
* **In a map.** Clicking **Data sources** ![](/files/qv8POfyKJ00VfTgugMR2) in the map toolbar opens the same catalog in a dialog, so editors can add layers to the current map without leaving it.

### Searching

The search bar at the top of the library searches **every** source your workspace has access to in a single pass — every folder in every Felt Server, every Cloud source, and the Global Library. Each source also has its own search input scoped to that source only.

### Recent data

The **Recent data** tab at the top of the Data sources list aggregates layers you've recently previewed, added to a map, or published, across every source. It keeps your most-used data a single click away regardless of where it lives.

### Previewing a layer

Click any layer to open the **preview panel** on the right. It has three tabs:

* **Map** — a live preview on a basemap, with styling applied.
* **Table** — the layer's data table, when applicable.
* **Metadata** — name, description, last-updated time, and other information about the dataset.

From the preview panel, click **Add to map** to add it to the map you're viewing, or from the workspace homepage, click **Create map** to start a new map with the layer included.

<figure><img src="/files/ynY7uVBiPGFZBxMKe1tp" alt=""><figcaption></figcaption></figure>

## Adding a new data source

From the workspace homepage, click **+** next to **Data sources**, or **+ New data source** from the in-map library.

<figure><img src="/files/uqFLgVNFDLjbMCoNi54F" alt=""><figcaption></figcaption></figure>

## Sharing and permissions

Every data source is either **private** (invite-only: only people invited by email can use it) or **public** (accessible by everyone in the workspace). For more information, see [Sharing a data source](/sharing-and-collaboration/sharing-a-data-source).

The Global Library is visible to every workspace and has no sharing controls.


# Felt Servers

Your workspace's spatial data in one place. Managed, permissioned, and ready to drop onto any map.

A **Felt Server** is a Felt-managed catalog of map layers your workspace can reuse. It sits alongside your external connections — Cloud sources like Postgres or Snowflake, with the same sharing options and permission model. While external sources connect to data that lives elsewhere, a Felt Server is where your published, styled, ready-to-reuse layers live inside of Felt.

When you publish a layer from a map, it lands in a Felt Server with its style, components, and metadata intact, and becomes available as a layer anyone with access can drop onto another map.

{% hint style="success" %}
Felt Servers are available on all paid plans. **Professional** includes one Felt Server; **Enterprise** allows unlimited Felt Servers. See the [pricing page](https://felt.com/pricing) for details.
{% endhint %}

<figure><img src="/files/20YkScOlu1vYJIAsEoPd" alt=""><figcaption></figcaption></figure>

## Multiple servers

A default Felt Server is created automatically with every new paid workspace. Enterprise workspaces can have more than one Felt Server — for example, one for operations, one for infrastructure, one for public-facing assets — each with its own content and sharing settings. To create a new server:

1. From the workspace homepage, click **+** next to **Data sources**.
2. In the **New data source** dialog, choose **Native** → **Felt Server**.
3. Give it a name and an optional description, then click **Create**.

## Folders

Use folders to organize the contents of your Felt Server. To create a folder:

* **Create a folder** — click **New folder** in the server's header.
* **Rename or delete a folder** — **...** menu on the folder. Deleting a folder removes the layers it includes from the server.

## Publishing to a Felt Server

From a map in edit mode:

1. Click the **...** menu on any layer in the legend and choose **Publish…** (or click the rocket icon in the layer panel).
2. In the **Publish to Felt Server** dialog, set the layer's name and description.
3. Pick a **Felt Server** and optionally a **folder** within it.
4. Click **Publish**.

<figure><img src="/files/I83CEyYVqhvJOJFVo7pK" alt="" width="375"><figcaption></figcaption></figure>

### Felt Server layer contents

* **Layer data** — the underlying dataset travels with the layer. The same data is referenced on each map that uses the layer.
* **Styling** — all visual styling (colors, symbols, stroke weights, opacity) expressed as [Felt Style Language](/layers/styling) (FSL).
* **Components** — any dashboard components configured for the layer and their settings.
* **Metadata** — the layer's name and description from the **Info** tab appear in the catalog.
* **Thumbnail** — an auto-generated preview based on the layer's bounding box.

## Using a Felt Server layer

Any workspace member with access to the server can add its layers to their maps:

1. Open a map and click ![](/files/qv8POfyKJ00VfTgugMR2) in the toolbar.
2. Pick the Felt Server from the sidebar.
3. Find the layer and click **Add to map**.

Restyling or re-filtering the layer on a map doesn't affect the published layer, and edits to the published layer don't affect the data on other maps.

## Sharing a Felt Server

Click **Share** in the server's header to open the Share dialog. Invite members by email, pick a role (**Source admin**, **Edit**, **View**), or set a workspace-wide default for all members. Read more about sharing at [Sharing a data source](/sharing-and-collaboration/sharing-a-data-source).

## Server settings

Click **Settings** in the server's header to rename the server, edit its description, or delete it.

Deleting a server cascades to every folder and layer inside it. Layers already placed on maps are not affected.


# Global Library

Felt's curated global catalog. Regional boundaries, demographics, imagery, and more. Available to every workspace at no storage cost.

The **Global Library** is a data source that every Felt workspace has access to, pre-populated with a catalog of curated datasets maintained by Felt. It's the same collection of layers you'll find at [felt.com/explore](https://felt.com/explore), exposed directly in your workspace alongside your own data sources.

<figure><img src="/files/5IlF4JkQ3z21LSUB27Xc" alt=""><figcaption></figcaption></figure>

## What's in it

The Global Library is organized by topic, with coverage that spans:

* **Administrative boundaries** — countries, states and provinces, counties, municipalities, neighborhoods, census geographies.
* **Demographics** — population, housing, and economic indicators at common census geographies.
* **Environment and land cover** — elevation, land cover, hydrology, protected areas.
* **Imagery and basemaps** — aerial imagery, satellite mosaics, reference basemaps.
* **Transportation and infrastructure** — roads, transit, points of interest.

## Adding a Global Library layer to a map

1. Open the in-map library with ![](/files/qv8POfyKJ00VfTgugMR2) or open the Global Library tab from the workspace homepage.
2. Browse by topic or search within the Global Library.
3. Click a layer to preview it.
4. From the preview panel, click **Add to map**.

A **copy** of the layer is placed on your map. You can restyle, filter, or edit it freely — changes don't flow back to the catalog.

## Attribution

Many Global Library datasets come from third parties and carry their own attribution requirements. See the [attribution policy](/terms-and-policy/attribution-policy) for details.


# Cloud sources

Connect to cloud databases like Snowflake, BigQuery, Postgres / PostGIS and more.

<figure><img src="/files/n86MTIERrwJBV0Ywqg0f" alt="" width="563"><figcaption></figcaption></figure>

Directly connect your cloud sources to access your data in Felt as a live catalog of layers. With this integration you can add a layer directly from your database to a map and configure live map updates from the source automatically. Cloud sources aren't subject to the browser-upload [Limits](/upload-anything/limits), so you can work with data far larger than a direct file upload.

{% hint style="success" %}
This feature is only available to customers on the [Enterprise plan](https://felt.com/pricing). To upgrade, [contact sales](https://felt.com/sales).
{% endhint %}

## Best practices

1. Create a new database user for Felt access. Felt does run queries on the database, although Felt keeps these to a minimum. This ensures easier auditing for your IT team.
2. Maintain only 1 connection per database source. Adding multiple connections to the same database will increase the query load on your database unnecessarily.
3. In case you see an error with the connection
   1. If your connection details have not changed, try hitting refresh to retry the connection
   2. If you need to change the connection click on **Fix** or the settings (cog wheel) to make & save changes to the connection details.
4. If your connection details are correct and you are still having issues, check the access logs for your database and send these in an email to <support@felt.com>.

## Felt IPs

When Felt connects to your data source, the traffic will come from one of the following IP addresses:

```
44.223.226.142
3.226.194.1
3.225.225.123
34.214.220.83
18.198.72.109
13.210.88.232
18.135.40.92
15.156.153.120
35.167.192.127
34.231.46.212
54.202.111.199
```

Limiting database access to a specific set of IP addresses enhances security by allowing connections only from pre-approved addresses while blocking all other connections at the firewall level.

## Syncing behaviors

#### Source syncs

Every 24 hours Felt will scan the connected source to make updates to the data available in Felt. This includes making recently added tables or views available in Felt as well as reflecting any changes or updates to the source schema. This cadence ensures that Felt matches your source of truth. These syncs do not impact any maps or layers on maps, so they do not contribute toward monthly data processing.

A source-level sync is successful as long as there is at least one successful table sync. In the scenario that some tables or views are unavailable or fail to sync during a source sync, those failing tables are skipped and Felt logs those skipped tables.

You can manually sync a source using the setting controls: [#settings-and-layout](#settings-and-layout "mention").

#### Layer syncs

When creating a map layer from a source, the layers will be **Live** by default. Live data will refresh on the map directly from the source based on a frequency set in Felt.

You can control the Live and Frequency settings in the **Create layer** dropdown:

<figure><img src="/files/IK0z8yFLTsyXKapSaYO9" alt="" width="307"><figcaption></figcaption></figure>

Live data refreshes will contribute toward your monthly data processing limits. For more information see [Refreshing data](/layers/refreshing-data).

## Settings and layout

Access source-level controls in the top-right corner of any source connection window

<figure><img src="/files/HyBZHOCLAF2XC9jtJYTG" alt=""><figcaption></figcaption></figure>

* **Sync Source:** triggers a manual sync for all tables and views in the source
  * *Does not sync map layers or impact data processing*
* **Settings:** review and make changes to source connection details, including authentication
* **Layout view:** choose between List view and Grid view

<figure><img src="/files/Bc3HRqC9w8Jp86MuMbHv" alt=""><figcaption><p>List view</p></figcaption></figure>

<figure><img src="/files/6Qm8i0FZC3SYlbMydHPg" alt=""><figcaption><p>Grid view</p></figcaption></figure>

## Access

Every cloud source has its own set of permissions. Invite members by email, pick a role (**View**, **Edit**, or **Source admin**), and set a workspace-default role from the **Share** dialog in the source's header. Private sources are hidden from members without access.

See [Permissions](/administration/felt-permissions#data-source-level-permissions) for the full model.

## Handling edits

[Editing layers](/layers/editing-layers) added from sources requires disabling live syncing from the original source. This is to prevent edits in Felt from being overwritten by the source when the layer refreshes. To proceed, add your edits to the layer (edit attribute, add feature, delete feature, etc) and then select **Edit anyway** from the popup.

<figure><img src="/files/Z4VQcAGN6jMch5FXDwMt" alt="" width="375"><figcaption></figcaption></figure>


# BigQuery

{% embed url="<https://youtu.be/3SvQtLHcyxA?si=OBX_mqWLK4RFmc70>" %}

Connect to [Google BigQuery](https://cloud.google.com/bigquery) to analyze and visualize your cloud warehouse data directly in Felt.

{% hint style="success" %}
This feature is only available to customers on the [Enterprise plan](https://felt.com/pricing). To upgrade, [contact sales](https://felt.com/sales).
{% endhint %}

1. Create a new, read-only user on your database for Felt access
2. Open **New data source** — from the workspace homepage, click **+** next to **Data sources**. Or from a map, click ![](/files/qv8POfyKJ00VfTgugMR2) in the toolbar and choose **+ New data source**.
3. Select **BigQuery**
4. Enter Connection Details
   1. **Source Name**: name of the source in Felt
   2. **Project ID**: the unique identifier for a Google Cloud Platform project
   3. **Dataset**: (*optional*) name of the BigQuery dataset. Datasets are “top-level containers used to organize and control access to your tables”. [Learn more](https://cloud.google.com/bigquery/docs/datasets-intro#datasets).
   4. **Service account JSON**: Upload a service account JSON with permissions to access your BigQuery tables. To create a new service account, navigate to the [**IAM & Admin**](https://console.cloud.google.com/iam-admin/serviceaccounts) page of the Google Cloud Console and generate a JSON file for it in the **Keys** tab. When creating the account, make sure to grant it access to your project for the **BigQuery Data Viewer**, **BigQuery Metadata Viewer** and **BigQuery Job User** roles.
5. Click **Connect**
6. Once connected you will see a catalog of your data with previews for your new source
7. From here you can add any of these layers to your maps!

{% hint style="warning" %}
If your BigQuery contains [EXTERNAL tables](https://cloud.google.com/bigquery/docs/external-tables) (such as Google Sheets or objects in Cloud Storage), you must also make sure the service account has the following [permissions](https://cloud.google.com/bigquery/docs/access-control):

* `storage.objects.get`
* `storage.objects.list`
  {% endhint %}

{% hint style="info" %}
Custom queries and views in BigQuery have an output limit of 10GB. For queries or views larger than this, switch to using tables (BigQuery tables do not have this limit) or filter the data further to lower the output size.
{% endhint %}


# Databricks

{% embed url="<https://youtu.be/nfL94qQG8HA?si=Jny1SdQ7bKm2E0Yw>" %}

Connect to [Databricks](https://www.databricks.com/) to analyze and visualize your data lake insights directly in Felt.

{% hint style="success" %}
This feature is only available to customers on the [Enterprise plan](https://felt.com/pricing). To upgrade, [contact sales](https://felt.com/sales).
{% endhint %}

1. Create a new, read-only user on your database for Felt access
2. Open **New data source** — from the workspace homepage, click **+** next to **Data sources**. Or from a map, click ![](/files/qv8POfyKJ00VfTgugMR2) in the toolbar and choose **+ New data source**.
3. Select **Databricks**
4. Enter Connection Details
   1. **Source Name**: name of the source in Felt
   2. **Host**: The server hostname of the cluster or SQL warehouse. You can get this from the **Server Hostname** value in the [**Advanced Options > JDBC/ODBC**](https://docs.databricks.com/en/integrations/compute-details.html) tab for your cluster.
   3. **HTTP Path**: The HTTP path of the cluster or SQL warehouse. You can get this from the **HTTP Path** value in the [**Advanced Options > JDBC/ODBC**](https://docs.databricks.com/en/integrations/compute-details.html) tab for your cluster.
   4. **Catalog**: (optional) the name of the catalog to read.
   5. **Schema**: (optional) the name of the database schema to read. If not provided, all schemas from the database will be read.
5. Enter credential information
   1. Select a credential type
      1. **Databricks PAT**. See Databricks' [documentation for Personal Access Tokens](https://docs.databricks.com/aws/en/dev-tools/auth/pat)
         1. Generate a token
         2. Fill in the **Personal Access Token** field with it
      2. **M2M OAuth**. See Databricks' [documentation for M2M OAuth](https://docs.databricks.com/aws/en/dev-tools/auth/oauth-m2m). To grant Felt access using M2M OAuth you must:
         1. Create a Service Principal in your account or workspace and copy the `client_id` and `client_secret`
         2. Navigate to the Databricks workspace that you want to grant Felt access to
         3. Navigate to the `Catalog` tab
         4. Select the Catalog
         5. Navigate to the `Permissions` tab
         6. Click `Grant`
         7. Select the Service Principal you've created for Felt
         8. Grant the `SELECT` , `BROWSE`, `USE_CATALOG`, and `USE_SCHEMA` permissions
         9. Fill in the **Client ID** and **Client Secret** fields
6. Click **Connect**
7. Once connected you will see a catalog of your data with previews for your new source
8. From here you can add any of these layers to your maps!


# Microsoft SQL Server

<div align="left"><figure><img src="/files/pCWRo9hLwfNnLndukh0u" alt="" width="375"><figcaption></figcaption></figure></div>

[Microsoft SQL Server](https://www.microsoft.com/en-us/sql-server) is a robust relational database management system with spatial capabilities. If you have geographic information in your SQL Server database, Felt provides a simple way to connect, query and visualize this data on a map.

{% hint style="success" %}
This feature is only available to customers on the [Enterprise plan](https://felt.com/pricing). To upgrade, [contact sales](https://felt.com/sales).
{% endhint %}

1. Create a new, read-only user on your database for Felt access
2. Open **New data source** — from the workspace homepage, click **+** next to **Data sources**. Or from a map, click ![](/files/qv8POfyKJ00VfTgugMR2) in the toolbar and choose **+ New data source**.
3. Select **Microsoft SQL Server**
4. Enter Connection Details
   1. **Source Name**: name of the source in Felt
   2. **Host** & **Port**: host URL & port number: connection details to your database
   3. **Database**: name of the Microsoft SQL Server database
   4. **Username** & **Password**: database user’s credentials *(not your Felt credentials)*
5. Click **Connect**
6. Once connected you will see a catalog of your data with previews for your new source
7. From here you can add any of these layers to your maps!


# Postgres / PostGIS

{% embed url="<https://youtu.be/77UK-lbBsYw?si=H-AlC7cupkbiaJ59>" %}

[PostGIS](https://postgis.net/) is a powerful spatial database extension for PostgreSQL that allows you to store, query, and analyze geographic data. Felt provides a simple way to connect, query and visualize this data on a map. Felt can connect to any web-accessible Postgres database by IP address or URL.

{% hint style="success" %}
This feature is only available to customers on the [Enterprise plan](https://felt.com/pricing). To upgrade, [contact sales](https://felt.com/sales).
{% endhint %}

1. Create a new, read-only user on your database for Felt access
2. Open **New data source** — from the workspace homepage, click **+** next to **Data sources**. Or from a map, click ![](/files/qv8POfyKJ00VfTgugMR2) in the toolbar and choose **+ New data source**.
3. Select **Postgres / PostGIS**
4. Enter Connection Details
   1. **Source Name**: name of the source in Felt
   2. **Host** & **Port**: host URL & port number: connection details to your database
   3. **Database**: name of the PostGIS database
   4. **Username** & **Password**: database user’s credentials *(not your Felt credentials)* \*\*\*\*
5. Click **Connect**
6. Once connected you will see a catalog of your data with previews for your new source
7. From here you can add any of these layers to your maps!

#### Supabase configuration

If you use Supabase, input the "Session Pooler connection string" instead of the direct connection string format when connecting to Felt. The session pooler connection string can be found in the Supabase dashboard. See [Supabase docs](https://supabase.com/docs/guides/database/connecting-to-postgres#poolers) for more information.


# Redshift

{% embed url="<https://youtu.be/HuAo8scneeY?si=OELvktet4-ngD4E>\_" %}

[Amazon Redshift](https://aws.amazon.com/redshift/) is a powerful cloud data warehouse that allows you to store and analyze various types of data, including spatial data. If you have geographic information in your Redshift database Felt provides a simple way to connect, query, and visualize this data on a map.

{% hint style="success" %}
This feature is only available to customers on the [Enterprise plan](https://felt.com/pricing). To upgrade, [contact sales](https://felt.com/sales).
{% endhint %}

1. Create a new, read-only user on your database for Felt access
2. Open **New data source** — from the workspace homepage, click **+** next to **Data sources**. Or from a map, click ![](/files/qv8POfyKJ00VfTgugMR2) in the toolbar and choose **+ New data source**.
3. Select **Amazon Redshift**
4. Enter Connection Details
   1. **Source Name**: name of the source in Felt
   2. **Host** & **Port**: host URL & port number: connection details to your database
   3. **Database**: name of the Redshift database
   4. **Username** & **Password**: database user’s credentials *(not your Felt credentials)* \*\*\*\*
5. Click **Connect**
6. Once connected you will see a catalog of your data with previews for your new source
7. From here you can add any of these layers to your maps!


# Snowflake

{% embed url="<https://youtu.be/WVDfsuVATEo?si=Supk94bGAOeIg29z>" %}

[Snowflake](https://www.snowflake.com/en/) is a powerful cloud-based data platform that allows you to store, analyze, and visualize various types of data, including spatial data. If you have geographic information in your Snowflake database Felt provides a simple way to connect, query, and visualize this data on a map.

{% hint style="success" %}
This feature is only available to customers on the [Enterprise plan](https://felt.com/pricing). To upgrade, [contact sales](https://felt.com/sales).
{% endhint %}

1. Create a new, read-only user on your database for Felt access
2. Open **New data source** — from the workspace homepage, click **+** next to **Data sources**. Or from a map, click ![](/files/qv8POfyKJ00VfTgugMR2) in the toolbar and choose **+ New data source**.
3. Select **Snowflake**
4. Enter Connection Details
   1. **Source Name**: name of the source in Felt
   2. **Account ID**: Snowflake [account identifier](https://docs.snowflake.com/en/user-guide/admin-account-identifier). Must include the name of the account along with its organization (e.g. `myorg-account123`)
   3. **Database**: name of the Snowflake database
   4. **Username** : database user — preferably a user with read-only permissions created specifically for Felt access.
   5. **Schema**: (optional) the name of the database schema to read. If not provided, all schemas from the database will be read.
   6. **Role** : the role that the database user should use. If not provided, the default role for the user will be used.
   7. **Warehouse** : the warehouse for the session. If not provided, the default warehouse for the user will be used.
   8. **Authentication method** : the desired authentication method and credentials to programmatically access the Snowflake database (see [#supported-authentication-methods](#supported-authentication-methods "mention") to learn more).
5. Click **Connect**
6. Once connected you will see a catalog of your data with previews for your new source
7. From here you can add any of these layers to your maps!

## Supported authentication methods

### Key-pair authentication

Snowflake [supports authentication using a key pair](https://docs.snowflake.com/en/user-guide/key-pair-auth) — a combination of a public key (assigned to a specific user in the Snowflake UI) and a private key (uploaded to Felt), optionally protected by a passphrase.

<details>

<summary>Step-by-step guide</summary>

1. In a terminal, run the following code to create a public-private key pair. Snowflake recommends using encrypted private keys (protected with a password)

```bash
# Encrypted private key (add -nocrypt flag for unencrypted version without password)
openssl genrsa 2048 | openssl pkcs8 -topk8 -v2 des3 -inform PEM -out snowflake_rsa_key.p8

# Public key
openssl rsa -in snowflake_rsa_key.p8 -pubout -out snowflake_rsa_key.pub
```

2. Create a new read-only role in a new SQL Worksheet. Make sure the role has read access to the desired warehouse and database, as well as all the desired contents including:

   * Schemas
   * Tables
   * Views
   * Materialized Views
   * Dynamic Tables

   Remember to replace `MY_DATABASE` and `MY_WAREHOUSE` with the actual values for your desired database and warehouse.

```sql
CREATE ROLE IF NOT EXISTS FELT_READONLY_ROLE;

GRANT USAGE ON DATABASE MY_DATABASE TO ROLE FELT_READONLY_ROLE;
GRANT USAGE ON WAREHOUSE MY_WAREHOUSE TO ROLE FELT_READONLY_ROLE;
GRANT USAGE ON ALL SCHEMAS IN DATABASE MY_DATABASE TO ROLE FELT_READONLY_ROLE;

GRANT SELECT ON ALL TABLES IN DATABASE MY_DATABASE TO ROLE FELT_READONLY_ROLE;
GRANT SELECT ON ALL VIEWS IN DATABASE MY_DATABASE TO ROLE FELT_READONLY_ROLE;
GRANT SELECT ON ALL MATERIALIZED VIEWS IN DATABASE MY_DATABASE TO ROLE FELT_READONLY_ROLE;
GRANT SELECT ON ALL DYNAMIC TABLES IN DATABASE MY_DATABASE TO ROLE FELT_READONLY_ROLE;
```

3. Create a new read-only user and assign the public key to it. This is the same username you'll use in the **Username** field when setting up the source connection.
   1. When pasting the public key contents, make sure to remove all newlines in addition to the public key headers (start with `---`)

```sql
CREATE OR REPLACE USER FELT_READONLY_USER
    DEFAULT_ROLE = 'FELT_READONLY_ROLE'
    TYPE = SERVICE DEFAULT_SECONDARY_ROLES = ('ALL')
    RSA_PUBLIC_KEY='MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAhgUzdrUxT7F5w1A6CVslBZ7dS37JunCnJxHkmnVk26FO6jl4yVWuFrk4b31NrnErcaKXeQqR18burBcz73xgDwZL/wplBLk1AZb76A/xYUlbS1L0+vKyuOPOJo8l1n9JyJ7UiyVdeVMCeFQIaDKYErzvCJ/9BO8+fNPPJr2AdAYHHFOw9HnfqyHA4j3jYdk2A9f8iYkEV5iAVdMyn6/iXqnfZDbcwXqgvfSPrrk56HrAZtSAhiW3VFhGzTnJq5ekSDBvK+fPoykdfnceV5nOQJSC41aFdsR9mUqVdbQsh78B4Ff1g+1ujqPjp+GJa8YaMOaYpQP43AkWBGjaS87F+wIDAQAB'
    COMMENT = 'Service User with read-only access and key-pair authentication';

GRANT ROLE FELT_READONLY_ROLE TO USER FELT_READONLY_USER;
```

4. When creating a Snowflake source in Felt, fill in the connection details specified above, then select the **Key pair** authentication method and upload your private key file (in this example, called `snowflake_rsa_key.p8`). If you created an encrypted private key, also provide the encryption password.

</details>

### Programmatic access token

Programmatic Access Tokens (or PATs, for short) allow you to connect your Snowflake source to Felt using a user-based, long-lived token. [Read Snowflake’s guide to generating programmatic access tokens](https://docs.snowflake.com/en/user-guide/programmatic-access-tokens).

{% hint style="warning" %}
Snowflake only allows creating PATs for human and service users that are bound to specific network rules. When setting up network rules, [make sure to add Felt's IPs to your allowlist](https://help.felt.com/data-sources/cloud-sources#felt-ips).
{% endhint %}

### Password (deprecated)

{% hint style="danger" %}
Snowflake will block programmatic access using username/password authentication in November 2025. If you are currently using this authentication method, please switch to one of the other supported methods to prevent Felt from losing access to your Snowflake source.
{% endhint %}


# Amazon S3

<figure><img src="/files/91XHhefSeqc2ArMp1Z8p" alt="" width="563"><figcaption></figcaption></figure>

Connect to a bucket in [Amazon S3](https://aws.amazon.com/s3/) to browse and visualize your vector and/or raster data in Felt.

{% hint style="success" %}
This feature is only available to customers on the [Enterprise plan](https://felt.com/pricing). To upgrade, [contact sales](https://felt.com/sales).
{% endhint %}

1. Open **New data source** — from the workspace homepage, click **+** next to **Data sources**. Or from a map, click ![](/files/qv8POfyKJ00VfTgugMR2) in the toolbar and choose **+ New data source**.
2. Select **Amazon S3**
3. Fill in the **Connection Details**
   1. **Source Name**: name of the source in Felt
   2. **S3 URI**: a URL to a bucket in Amazon S3, such as `s3://my-storage-bucket/my_prefix`. If the URL contains a prefix (in this example, `my_prefix`), Felt will only search for objects that start with it.
   3. **Credentials**: see the following [**Authentication**](#authentication) section.
4. Click **Connect**
5. Once connected you will see a catalog of your data with previews for your new source
6. From here you can add any of these layers to your maps!

### Authentication

For private S3 buckets, you will need to allow Felt to [assume an IAM role](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) on your account:

* Create a [policy](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html) that allows listing and reading objects in the S3 buckets where your assets are located. It should be able to perform the following actions:
  * `s3:GetObject`
  * `s3:GetObjectVersion`
  * `s3:ListBucket`
  * `s3:GetBucketLocation`
* Create [an IAM role](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html) and attach the aforementioned policy to it.
* Create a Trust Relationship for said role that allows Felt to access your assets. Make sure to include all the principals listed below:

```json
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::949302143999:root",
                    "arn:aws:iam::452667257775:root",
                    "arn:aws:iam::375127086520:root",
                    "arn:aws:iam::033636008376:root"
                ]
            },
            "Action": "sts:AssumeRole"
        }
    ]
}
```

### Supported file formats

Felt can read in spreadsheet, vector, and raster files from cloud storage connections. To see file formats supported see [Files](/upload-anything/files) in our [Upload Anything](/upload-anything/files) section.

{% hint style="success" %}
To skip Felt's data processing and stream in large, high-resolution raster files as Cloud Optimized GeoTIFFs directly from your cloud source, see [Raster infrastructure](/data-sources/raster-infrastructure).
{% endhint %}

### Raster metadata extraction

Felt can extract metadata properties from the filepaths to objects in your bucket. Learn more about Felt's Raster infrastructure feature in [Organizing your raster data](/data-sources/raster-infrastructure/organizing-your-raster-data).


# Azure Blob Storage

<figure><img src="/files/dGlZzKG0YDE4ILQviGoV" alt="" width="563"><figcaption></figcaption></figure>

Connect to a bucket in [Azure Blob Storage](https://azure.microsoft.com/en-us/products/storage/blobs) to browse and visualize your vector and/or raster data in Felt.

{% hint style="success" %}
This feature is only available to customers on the [Enterprise plan](https://felt.com/pricing). To upgrade, [contact sales](https://felt.com/sales).
{% endhint %}

1. Open **New data source** — from the workspace homepage, click **+** next to **Data sources**. Or from a map, click ![](/files/qv8POfyKJ00VfTgugMR2) in the toolbar and choose **+ New data source**.
2. Select **Azure Blob Storage**
3. Fill in the **Connection Details**
   1. **Source Name**: name of the source in Felt
   2. **Blob Storage Endpoint**: a URL to a bucket in Azure Blob Storage, such as\
      `https://my-account.blob.core.windows.net/my_bucket/my_prefix`.\
      \
      If the URL contains a prefix (in this example, `my_prefix`), Felt will only search for objects that start with it.
   3. **Credentials**: see the following [**Authentication**](#authentication) section below.
4. Click **Connect**
5. Once connected you will see a catalog of your data with previews for your new source
6. From here you can add any of these layers to your maps!

### Authentication

For objects hosted in Azure Storage, provide a [connection string](https://learn.microsoft.com/en-us/azure/storage/common/storage-configure-connection-string#create-a-connection-string-using-a-shared-access-signature) to grant Felt access to your Azure storage account.

We recommend creating a dedicated [Shared Access Signature (SAS)](https://learn.microsoft.com/en-us/azure/storage/common/storage-sas-overview) with only **Read** and **List** permissions. Shared Access Signatures may be created at both the storage account level and the individual container level.

<details>

<summary>Creating an account-level SAS</summary>

* In Azure Portal, navigate to **Storage Accounts** and click on the desired account.
* In the left-hand sidebar, open the **Security + networking** dropdown and click on **Shared access signature**.
* Create a new SAS with access to all services and resources, and limit permissions to only **Read** and **List**.
* Click on **Generate SAS and connection string** and copy the **Connection string** to paste into Felt.

</details>

<details>

<summary>Creating a container-level SAS</summary>

* In Azure Portal, navigate to **Storage Accounts** and click on the desired account.
* In the left-hand sidebar click on **Storage browser**, then click on **Blob containers**.
* Identify the desired container and click on the three dots (**…**) at the far right of its row, then click on **Generate SAS**.
* Create a new SAS with access to all services and resources, and limit permissions to only **Read** and **List**.
* Click on **Generate SAS and connection string** and copy the **Connection string** to paste into Felt.

</details>

When inputting the Azure Connection String into Felt there should be no additional spaces:

{% code overflow="wrap" lineNumbers="true" %}

```
BlobEndpoint=https://my-account.blob.core.windows.net/;SharedAccessSignature={YOUR SHARED ACCESS STRING}
```

{% endcode %}

### Supported file formats

Felt can read in spreadsheet, vector, and raster files from cloud storage connections. To see file formats supported see [Files](/upload-anything/files) in our [Upload Anything](/upload-anything/files) section.

{% hint style="success" %}
To skip Felt's data processing and stream in large, high-resolution raster files as Cloud Optimized GeoTIFFs directly from your cloud source, see [Raster infrastructure](/data-sources/raster-infrastructure).
{% endhint %}

### Raster metadata extraction

Felt can extract metadata properties from the filepaths to objects in your bucket. Learn more about Felt's Raster infrastructure feature in [Organizing your raster data](/data-sources/raster-infrastructure/organizing-your-raster-data).


# Google Cloud Storage

<figure><img src="/files/firzYQOFNTAn1yPqQzKW" alt="" width="563"><figcaption></figcaption></figure>

Connect to a bucket in [Google Cloud Storage](https://cloud.google.com/storage?hl=en) (GCS) to browse and visualize your vector and/or raster data in Felt.

{% hint style="success" %}
This feature is only available to customers on the [Enterprise plan](https://felt.com/pricing). To upgrade, [contact sales](https://felt.com/sales).
{% endhint %}

1. Open **New data source** — from the workspace homepage, click **+** next to **Data sources**. Or from a map, click ![](/files/qv8POfyKJ00VfTgugMR2) in the toolbar and choose **+ New data source**.
2. Select **Google Cloud Storage**
3. Fill in the **Connection Details**
   1. **Source Name**: name of the source in Felt
   2. **GS URI**: a URL to a bucket in Google Cloud Storage, such as `gs://my-storage-bucket/my_prefix`. If the URL contains a prefix (in this example, `my_prefix`), Felt will only search for objects that start with it.
   3. **Credentials**: see the following [**Authentication**](#authentication) section.
4. Click **Connect**
5. Once connected you will see a catalog of your data with previews for your new source
6. From here you can add any of these layers to your maps!

### Authentication

Grant Felt access to objects in private buckets by uploading a **Service account JSON** with access to your GCS bucket. To create a new service account, navigate to the [**IAM & Admin**](https://console.cloud.google.com/iam-admin/serviceaccounts) page of the Google Cloud Console and generate a JSON file for it in the **Keys** tab.

When creating the account, make sure to grant it access to your project for the **Storage Object Viewer** role.

### Supported file formats

Felt can read in spreadsheet, vector, and raster files from cloud storage connections. To see file formats supported see [Files](/upload-anything/files) in our [Upload Anything](/upload-anything/files) section.

{% hint style="success" %}
To skip Felt's data processing and stream in large, high-resolution raster files as Cloud Optimized GeoTIFFs directly from your cloud source, see [Raster infrastructure](/data-sources/raster-infrastructure).
{% endhint %}

### Raster metadata extraction

Felt can extract metadata properties from the filepaths to objects in your bucket. Learn more about Felt's Raster infrastructure feature in [Organizing your raster data](/data-sources/raster-infrastructure/organizing-your-raster-data).


# Wherobots

Connect to [Wherobots](https://wherobots.com/) to analyze and visualize your data lake insights directly in Felt.

<figure><img src="/files/E7zW8oucqmUHmJ7e62ZX" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/60tM18LKjwtO8zsX5U4Z" alt=""><figcaption></figcaption></figure>

{% hint style="success" %}
This feature is only available to customers on the [Enterprise plan](https://felt.com/pricing). To upgrade, [contact sales](https://felt.com/sales).
{% endhint %}

1. Open **New data source** — from the workspace homepage, click **+** next to **Data sources**. Or from a map, click ![](/files/qv8POfyKJ00VfTgugMR2) in the toolbar and choose **+ New data source**.
2. Select **Wherobots**
3. Enter Connection Details
   1. **Source Name**: name of the source in Felt
   2. **Region**: The cloud region to launch the Wherobots runtime compute resources.
   3. **Runtime**: The size of the compute runtime
4. Enter credential information
   1. **API Key**: an API key to access your Wherobots workspace. Keys can be created in the [Wherobots settings](https://cloud.wherobots.com/settings/api-keys).
5. Click **Connect**
6. Once connected you will see a catalog of your data with previews for your new source
7. From here you can add any of these layers to your maps!


# ESRI Feature Server

{% embed url="<https://youtu.be/po5VBdpQs2c?si=NQS5CoJoQvLmugbj>" %}

Connect to [ESRI Feature Services](https://enterprise.arcgis.com/en/server/latest/publish-services/windows/what-is-a-feature-service-.htm) to analyze and visualize GIS data directly in Felt.

{% hint style="success" %}
This feature is only available to customers on the [Enterprise plan](https://felt.com/pricing). To upgrade, [contact sales](https://felt.com/sales).
{% endhint %}

1. Open **New data source** — from the workspace homepage, click **+** next to **Data sources**. Or from a map, click ![](/files/qv8POfyKJ00VfTgugMR2) in the toolbar and choose **+ New data source**.
2. Select **ESRI Feature Server**
3. Enter Connection Details
   1. **Source Name**: name of the source in Felt
   2. **URL**: the URL of your Feature Server. These always end in `/FeatureServer` or `/MapServer` and, optionally, an integer layer ID (such as `/FeatureServer/3`)
   3. **Token**: a long-lived API key used to access private resources. [Learn more](https://developers.arcgis.com/documentation/security-and-authentication/api-key-authentication/api-key-credentials/).
      1. When configuring your API key, you may choose to only accept requests from specific [referrers](https://developers.arcgis.com/documentation/security-and-authentication/api-key-authentication/api-key-credentials/#referrers). If so, you'll need to add `https://felt.com` to the list of allowed domains
      2. API key creation is available in ArcGIS Online, ArcGIS Location Platform and ArcGIS Enterprise ([starting in version 11.4](https://developers.arcgis.com/documentation/security-and-authentication/faq/#can-i-use-api-keys-with-arcgis-enterprise))
4. Click **Connect**
5. Once connected you will see a catalog of your data with previews for your new source
6. From here you can add any of these layers to your maps!

{% hint style="info" %}
**Tip:** For publicly available feature servers simply copy the URL then paste it directly on your map. Felt will automatically recognize and add the data as a layer.
{% endhint %}


# Web Feature Service (WFS)

<div align="left"><figure><img src="/files/RBehia6bxxonTLQjZGSP" alt="" width="563"><figcaption></figcaption></figure></div>

[Web Feature Service](https://www.ogc.org/publications/standard/wfs/) (WFS) is an open standard for exchanging geographic information over the internet. It allows you to access and query spatial data from remote servers regardless of the underlying database system. If you have geographic information available through WFS endpoints that you want to visualize on maps, Felt provides a simple way to connect and display this data.

{% hint style="success" %}
This feature is only available to customers on the [Enterprise plan](https://felt.com/pricing). To upgrade, [contact sales](https://felt.com/sales).
{% endhint %}

{% hint style="info" %}
Only HTTPS sources are supported with Felt's WFS source. HTTP is not supported in Felt.
{% endhint %}

1. Open **New data source** — from the workspace homepage, click **+** next to **Data sources**. Or from a map, click ![](/files/qv8POfyKJ00VfTgugMR2) in the toolbar and choose **+ New data source**.
2. Select **Web Feature Service (WFS)**
3. Enter Connection Details
   1. **Source Name**: name of the source in Felt
   2. **URL**: the URL of your WFS source (HTTPS required)
4. Click **Connect**
5. Once connected you will see a catalog of your data with previews for your new source
6. From here you can add any of these layers to your maps!


# WMS/WMTS

<div align="left"><figure><img src="/files/RBehia6bxxonTLQjZGSP" alt="" width="563"><figcaption></figcaption></figure></div>

Connect to standard [Web Map Service](https://www.ogc.org/publications/standard/wms/) (WMS) and Web Map Tile Service (WMTS) data sources to incorporate authoritative geographic information into your maps. These OGC-compliant services allow you to access and display map imagery from government agencies, research institutions, and other spatial data providers.

{% hint style="success" %}
This feature is only available to customers on the [Enterprise plan](https://felt.com/pricing). To upgrade, [contact sales](https://felt.com/sales).
{% endhint %}

{% hint style="info" %}
Only HTTPS sources are supported with Felt's WMS/WMTS source. HTTP is not supported in Felt.
{% endhint %}

1. Open **New data source** — from the workspace homepage, click **+** next to **Data sources**. Or from a map, click ![](/files/qv8POfyKJ00VfTgugMR2) in the toolbar and choose **+ New data source**.
2. Select **WMS/WMTS**
3. Enter Connection Details
   1. **Source Name**: name of the source in Felt
   2. **URL**: the URL of your WMS/WMTS source. (HTTPS required)
4. Click **Connect**
5. Once connected you will see a catalog of your data with previews for your new source
6. From here you can add any of these layers to your maps!


# SQL queries

Create dynamic map layers in Felt using SQL queries.

<figure><img src="/files/R2HY6CRhAFIRUnmaPUpS" alt=""><figcaption></figcaption></figure>

Felt’s SQL query feature lets you write and execute SQL queries directly against your database, enabling you to easily visualize results from custom filters, joins and spatial analysis powered upstream. It gives you full control over how your data is displayed, ensuring your maps are tailored to meet your specific requirements. Whether you're refining data or creating complex visualizations from generated SQL results, Felt makes it easy to seamlessly integrate your custom queries with your mapping workflow.

{% hint style="success" %}
This feature is only available to customers on the [Enterprise plan](https://felt.com/pricing). To upgrade, [contact sales](https://felt.com/sales).
{% endhint %}

### Set up

Connecting a cloud data source is required to access this feature, and SQL can only be run on the tables and views connected in your cloud source. The cloud sources that support SQL queries today are:

* Postgres / PostGIS
* Snowflake
* BigQuery
* Microsoft SQL Server
* Databricks
* Redshift

To set up a source connection, [see detailed instructions on cloud sources](/data-sources/cloud-sources).

### Querying with Felt AI

Felt AI turns natural language questions into SQL for your connected database — anyone on the team can run complex spatial analysis, explore schemas and table attributes, and create live-syncing layers by describing what they want. The generated SQL always appears in the query editor, where you can inspect, edit, or extend it before creating a layer.

#### Perform complex spatial analysis

<figure><img src="/files/0XrQpH5jb0isuhOl8Rtc" alt="" width="563"><figcaption></figcaption></figure>

#### Explore data schema and table attributes

<figure><img src="/files/MukjWVGYiavljeOFRpt8" alt="" width="563"><figcaption></figcaption></figure>

#### Optimize queries

<figure><img src="/files/LSXOPvwRasNNT9KMq5wR" alt="" width="563"><figcaption></figcaption></figure>

#### Create a layer with a SQL query

1. Click **Data sources** in the toolbar and select your data source under the **Sources** heading.
2. Select **+ New SQL query** (or select a table and click **...** > **Write SQL query**).
3. The **SQL query** window will open

   <figure><img src="/files/z3wpakQhgby22ziCpZVO" alt=""><figcaption></figcaption></figure>

   1. **the left side** includes all the tables and views available in your source as well as recent queries the team has run
   2. **the right side** includes the SQL query editor (top) and the AI prompt area (bottom) where you can provide prompts to Felt AI. Use the **Schema** and **Metadata** tabs (bottom) to learn more about the structure of tables in the database.
4. Once Felt AI generates SQL, a preview will run automatically. Use the **Results** tab (bottom right) to review results from the SQL query in table format.
5. Click **Create Layer** to add your data to the map.
   1. The dropdown option allows you to set the **Live** sync Frequency or turn **Live** syncs off

<figure><img src="/files/6WD35uEDZb2N9ppD9rFm" alt="" width="232"><figcaption></figcaption></figure>

6. A new layer will be added to your map and you can start styling your results.

### Editing SQL layers

You can review and edit existing layers with updated SQL either with or without AI assistance. You can edit or write queries directly within the query editor (top right).

To edit or update an existing layer built with SQL:

1. Select the layer in Edit mode
2. Navigate to the **Data** tab in the layer menu
3. Click on **SQL query** next to **Dataset**

<figure><img src="/files/BufI3keQnT8oV15no4q2" alt="" width="219"><figcaption></figcaption></figure>

4. Either edit the SQL directly or use Felt AI assistant to make modifications to the query
5. Click **Save** to update the existing layer with the new query

<figure><img src="/files/MIBZPbnyb0noS9XMItUX" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
Once edits are saved and while a layer is processing the updated query it cannot be modified or changed until it has finished the updates.
{% endhint %}

### Copy recent queries

The 20 most recent SQL queries that created layers on maps will appear at the top when opening a source via **Data sources**. This will show you a history of all the queries run on maps in the workspace.

<figure><img src="/files/bIMwr7nGwJj9C67BDgMV" alt="" width="563"><figcaption></figcaption></figure>

To re-use and fork queries other teammates have run, click on any of the entries listed under **Queries** and start editing.

### Debugging

1. Run previews by clicking on the **Preview** button (top right) to verify the SQL query is valid
2. Errors will appear in the **Results** tab (bottom right) with more details
3. You can fix errors with Felt's AI assistant by clicking the **Fix errors with AI** option

<figure><img src="/files/8dp5SIfBxv78XiIEeqFA" alt=""><figcaption></figcaption></figure>

### Supported spatial operations

Different SQL platforms offer varying levels of support for spatial operations, with some providing extensive libraries of geospatial functions and others offering more basic capabilities. While some focus on advanced geographic and geometric queries, others prioritize scalability and integration with broader data processing workflows. The specific capabilities and limitations depend on the platform, so refer to the relevant documentation linked below for more details.

* [Databricks](https://docs.databricks.com/en/sql/language-manual/sql-ref-h3-geospatial-functions.html)
* [BigQuery](https://cloud.google.com/bigquery/docs/reference/standard-sql/geography_functions)
* [Microsoft SQL Server](https://learn.microsoft.com/en-us/sql/relational-databases/spatial/spatial-data-sql-server?view=sql-server-ver16)
* [Redshift](https://docs.aws.amazon.com/redshift/latest/dg/geospatial-functions.html)
* [Snowflake](https://docs.snowflake.com/en/sql-reference/functions-geospatial)
* Postgres ([PostGIS](https://postgis.net/docs/reference.html))

{% hint style="info" %}
The SQL query feature supports only `SELECT` statements, ensuring read-only access to your database.
{% endhint %}

## Example operations

{% hint style="success" %}
Not sure which operation to use? Ask [Felt AI](#querying-with-felt-ai) to run the operation for you.
{% endhint %}

<table><thead><tr><th>Spatial Operation</th><th width="252">Definition</th><th>Code Example</th></tr></thead><tbody><tr><td>ST_Intersects</td><td>Tests whether two geometries share any space in common. Returns true if geometries intersect, false otherwise. Used for identifying overlapping areas.</td><td><code>SELECT a.*, b.* FROM service_areas a JOIN market_zones b ON ST_Intersects(a.geometry, b.geometry);</code></td></tr><tr><td>ST_Within</td><td>Tests whether one geometry is completely inside another. Returns true if the first geometry is completely within the second geometry.</td><td><code>SELECT a.name, b.name FROM points a JOIN polygons b ON ST_Within(a.geometry, b.geometry);</code></td></tr><tr><td>ST_Buffer</td><td>Creates a new geometry that represents all points within a given distance from the input geometry. Useful for creating service areas or zones of influence.</td><td><code>SELECT location_id, ST_Buffer(geometry, 5000) as service_area FROM distribution_centers;</code></td></tr><tr><td>ST_Centroid</td><td>Computes the geometric center (centroid) of a geometry. Returns a point that represents the average position of all points in the geometry.</td><td><code>SELECT region_name, ST_Centroid(geometry) as center_point FROM service_regions;</code></td></tr><tr><td>ST_Distance</td><td>Calculates the shortest distance between two geometries. Returns the minimum distance between any two points in the two geometries.</td><td><code>SELECT a.id, b.id, ST_Distance(a.geometry, b.geometry) as distance FROM points a CROSS JOIN points b WHERE a.id != b.id;</code></td></tr><tr><td>ST_Area</td><td>Calculates the area of a polygon geometry. Returns the area in the units of the spatial reference system.</td><td><code>SELECT territory_id, ST_Area(geometry::geography) as area_sqm FROM market_territories;</code></td></tr><tr><td>ST_Length</td><td>Calculates the length of a linear geometry (linestring). Returns the length in the units of the spatial reference system.</td><td><code>SELECT route_id, ST_Length(geometry::geography) as length_meters FROM delivery_routes;</code></td></tr><tr><td>ST_Union</td><td>Combines multiple geometries into a single geometry. Dissolves overlapping boundaries and creates a single continuous geometry.</td><td><code>SELECT region_id, ST_Union(geometry) as combined_geometry FROM parcels GROUP BY region_id;</code></td></tr><tr><td>ST_Intersection</td><td>Returns the geometry representing the shared portions of two geometries. Creates a new geometry containing only the overlapping areas.</td><td><code>SELECT ST_Intersection(a.geometry, b.geometry) as overlap FROM zone_a a CROSS JOIN zone_b b;</code></td></tr><tr><td>ST_Transform</td><td>Transforms a geometry from one coordinate system to another. Used to convert between different spatial reference systems (SRS).</td><td><code>SELECT id, ST_Transform(geometry, 4326) as wgs84_geom FROM locations;</code></td></tr><tr><td>ST_Envelope</td><td>Computes the minimum bounding rectangle that contains a geometry. Returns a rectangular polygon that completely encloses the input geometry.</td><td><code>SELECT region_id, ST_Envelope(ST_Collect(geometry)) as bbox FROM market_regions GROUP BY region_id;</code></td></tr><tr><td>ST_ConvexHull</td><td>Computes the smallest convex polygon that contains all points in a geometry. Creates a shape that represents the outer boundary of a set of points.</td><td><code>SELECT cluster_id, ST_ConvexHull(ST_Collect(geometry)) as boundary FROM points GROUP BY cluster_id;</code></td></tr><tr><td>ST_Contains</td><td>Tests whether one geometry completely contains another. Returns true if the second geometry is completely contained within the first geometry.</td><td><code>SELECT points.* FROM customer_points points JOIN service_areas areas ON ST_Contains(areas.geometry, points.geometry);</code></td></tr></tbody></table>

## Frequently asked questions

<details>

<summary>What are SQL queries in Felt?</summary>

SQL queries let you run spatial analysis against your cloud database from within Felt. You can ask questions in plain English — Felt AI generates the SQL and executes it against your database — or write the SQL yourself. Results are visualized on your map as layers.

</details>

<details>

<summary>Who can access SQL queries?</summary>

This feature is only available to admins and editors on the Enterprise plan. To upgrade, contact sales.

</details>

<details>

<summary>Do I need to know SQL to use this feature?</summary>

No, you can ask questions in plain English and Felt AI will generate the SQL code for you. However, you can also write or modify SQL directly if desired.

</details>

<details>

<summary>How do I review my query results?</summary>

Use the **Results** tab (bottom right) to review results from the SQL query in table format. A preview runs automatically once Felt AI generates the SQL.

</details>

<details>

<summary>Can I control how often my data syncs?</summary>

Yes, when clicking **Create Layer**, the dropdown option allows you to set the Live sync Frequency or turn Live syncs off.

</details>

<details>

<summary>How can I learn more about my database structure in Felt?</summary>

Use the **Schema** and **Metadata** tabs at the bottom of the interface to learn more about the structure of tables in the database.

</details>

<details>

<summary>What happens after I create a layer?</summary>

A new layer will be added to your map and you can start styling your results immediately.

</details>

<details>

<summary>Are queries previewed automatically?</summary>

Yes, once Felt AI generates SQL, a preview will run automatically so you can review the results before creating the layer.

</details>

<details>

<summary>Can I write or modify SQL directly?</summary>

Yes, the SQL editor allows you to write or modify SQL queries directly if you prefer not to use the AI prompt feature.

</details>


# Raster infrastructure

Stream raster data directly from your cloud storage — no duplication, no preprocessing.

{% embed url="<https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmRfGitkyjOEMvVsEyGWN%2Fuploads%2FpotWKZgx9Aw791Aoq5Vd%2FRasterLaunch%20-%20Preview%20Screen.mp4?alt=media&token=df17d7c7-53f0-4fce-bcc8-8171a2afa835>" %}

Felt connects directly to raster data cloud storage, with support for [Cloud Optimized GeoTIFFs (COGs)](/data-sources/raster-infrastructure/cloud-optimized-geotiffs) and [SpatioTemporal Asset Catalogs (STACs)](/data-sources/raster-infrastructure/stac). Your raster data is streamed in place, indexed for location and metadata filtering, and made available for immediate [visualization](/layers/styling/raster-layers) without moving or duplicating files. This lets you serve very large rasters without hitting the browser-upload [Limits](/upload-anything/limits).

For guidance on preparing your data for use in Felt, see [Organizing your raster data](/data-sources/raster-infrastructure/organizing-your-raster-data).

{% hint style="success" %}
This feature is only available to customers on the [Enterprise plan](https://felt.com/pricing). To upgrade, [contact sales](https://felt.com/sales).
{% endhint %}


# Organizing your raster data

<figure><img src="/files/ARupOQANIh3A9djG5sY0" alt=""><figcaption></figcaption></figure>

To make a large collection of raster data quickly available in Felt, we recommend storing it in [Cloud Optimized GeoTIFF](/data-sources/raster-infrastructure/cloud-optimized-geotiffs) format in a [cloud storage](/data-sources/cloud-sources) bucket, with relevant metadata about your files encoded in [regular patterns](#extracting-properties-with-regex) in their paths.

{% hint style="success" %}
This feature is only available to customers on the [Enterprise plan](https://felt.com/pricing). To upgrade, [contact sales](https://felt.com/sales).
{% endhint %}

### Storage

The easiest way to connect your raster data to Felt is to host it in a cloud storage bucket using one of the following options:

* [Amazon S3](/data-sources/cloud-sources/amazon-s3)
* [Google Cloud Storage](/data-sources/cloud-sources/google-cloud-storage)
* [Azure Blob Storage](/data-sources/cloud-sources/azure-blob-storage)

### Format

[Cloud Optimized GeoTIFFs](https://cogeo.org/) (COGs, for short) are raster files optimized for being read from a remote server, structured in a way that enables efficient cloud workflows.

While Felt can process many raster data formats, COGs will ensure that only the data you actually want to visualize on the map is read. To learn more about how to create COGs that can be streamed efficiently by Felt, [click here](/data-sources/raster-infrastructure/cloud-optimized-geotiffs).

### Structure

Storing your files in cloud storage with a well-defined, strict naming pattern is the best way of making your data discoverable:

* Use folders to organize your files into projects.
* Encode properties that you'd like to search by into the file path.

Here's an example of a naming pattern:

```
s3://my-bucket/{project}/{type}_{YYYYMMDD}_r{resolution}.tiff
```

A file following that pattern would look like this:

```
s3://my-bucket/fire_hazards/dem_20250515_r35.tiff
```

#### Extracting properties with regex

Using [regular expressions](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_expressions), Felt can extract metadata properties from the path to files in a cloud storage bucket. Here's a set of regular expressions that can be used to extract the properties defined in the template above.

<figure><img src="/files/krzU99baIuAxt0Hf8FlF" alt=""><figcaption></figcaption></figure>

In this example, the properties `project`, `type`, `date` and `resolution` will be extracted during bucket inspection, and can be later used to filter and search for objects.

### STAC

If your metadata storage needs go beyond a string pattern, or if the number of objects stored is either very large, or very dynamic, using a [SpatioTemporal Asset Catalog](/data-sources/raster-infrastructure/stac) allows storage of metadata (including spatial and temporal extents) in an explicit format. Both static STACs in JSON format or dynamic STAC APIs can be added to Felt as sources.

Felt can load data directly from [cloud storage](/data-sources/cloud-sources), or from any other storage location that exposes the data over HTTPS. The closer your data is to your Felt instance (if you are using a VPC), the less latency you will have in tile serving.

If you wish to [stream your data](/data-sources/raster-infrastructure/cloud-optimized-geotiffs) without uploading the entire file into Felt, the data storage location must support [range requests](https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/Range_requests).


# Cloud Optimized GeoTIFFs

<figure><img src="/files/hP42XsFS431ejogUCbbP" alt="" width="563"><figcaption></figcaption></figure>

While Felt can read many raster formats, storing your data as a [Cloud Optimized GeoTIFF](https://cogeo.org/) (COG) allows efficient access of subsets of data for fast viewing.

{% hint style="success" %}
This feature is only available to customers on the [Enterprise plan](https://felt.com/pricing). To upgrade, [contact sales](https://felt.com/sales).
{% endhint %}

## Configuration

<table><thead><tr><th width="149.22918701171875">Required?</th><th width="188.5181884765625">Configuration option</th><th>Recommended values</th></tr></thead><tbody><tr><td>Mandatory</td><td>Overview resampling</td><td><ul><li><code>bilinear</code> for floating point data</li><li><code>nearest</code> for integer or categorical data</li></ul></td></tr><tr><td>Mandatory</td><td>Block size</td><td><code>256x256</code> or <code>512x512</code></td></tr><tr><td>Recommended</td><td>Compression scheme</td><td><ul><li><code>YCbCr</code> with JPG compression for 8-bit RGB data</li><li><code>DEFLATE</code>, <code>LZW</code>, or <code>ZSTD</code> for floating point data</li></ul></td></tr><tr><td>Recommended</td><td>Transparency</td><td>Set an explicit <a href="https://gdal.org/en/stable/development/rfc/rfc15_nodatabitmask.html#alpha-bands">Nodata mask band</a></td></tr><tr><td>Recommended*</td><td>Summary statistics</td><td>Min, max, mean and standard deviation. Stored in the header, per the GeoTIFF specification</td></tr></tbody></table>

{% hint style="warning" %}
If you upload a Cloud Optimized GeoTIFF that meets the mandatory requirements but doesn’t have summary statistics, Felt will sample the entire file to compute the values, which will add additional processing time.
{% endhint %}

## Converting raster files to Cloud Optimized GeoTIFFs

1. Install the [GDAL](https://gdal.org/en/stable/download.html#binaries) command line tools. If you’re using [homebrew](https://brew.sh/) on macOS, you can do this with `brew install gdal`
2. Use the [gdal\_translate](https://gdal.org/en/stable/programs/gdal_translate.html#gdal-translate) command with the `COG` output format and the `-stats` flag. This will create a COG with summary stats and overviews that will be most efficiently streamed into Felt.

<details>

<summary>Example for floating-point data</summary>

```bash
$ gdal_translate -stats -of COG -resampling bilinear -co COMPRESS=LZW {input}.tif {output}.tif
```

</details>

<details>

<summary>Example for integer data</summary>

```bash
$ gdal_translate -stats -of COG -resampling nearest -co COMPRESS=JPEG {input}.tif {output}.tif
```

</details>


# STAC

<figure><img src="/files/lmN7bI5UP6UQCy8JihvO" alt="" width="563"><figcaption></figcaption></figure>

[SpatioTemporal Asset Catalogs](https://stacspec.org/en) (STAC) use a common language to describe geospatial information, so it can more easily be worked with, indexed, and discovered.

{% hint style="success" %}
This feature is only available to customers on the [Enterprise plan](https://felt.com/pricing). To upgrade, [contact sales](https://felt.com/sales).
{% endhint %}

## Connecting a STAC source

Felt can connect to both static STAC catalogs and dynamic STAC APIs:

* Open **New data source** — from the workspace homepage, click **+** next to **Data sources**. Or from a map, click ![](/files/qv8POfyKJ00VfTgugMR2) in the toolbar and choose **+ New data source**.
* Select **STAC**
* Enter Connection Details
  1. **Source Name**: name of the source in Felt
  2. **URL**: the URL of your STAC source.
  3. Set authentication if necessary (see next section)
* Click **Connect**
* Once connected you will see a catalog of your data with previews for your new source
* From here you can add any of these layers to your maps!

## Authentication

If your STAC is private, you may configure credentials for both the STAC API itself or the assets linked in the [STAC Items](https://github.com/radiantearth/stac-spec/blob/master/item-spec/item-spec.md). For example, you may have a public STAC API (no authentication needed) that points to private assets in AWS S3 or Google Cloud Storage, which require appropriate permission to access.

<figure><img src="/files/AHoJlMhkVqWz8hvdPu7k" alt=""><figcaption></figcaption></figure>

### AWS Assume Role

If your assets are hosted in Amazon's Simple Storage Service (better known as **S3**), you will need to allow Felt to [assume an IAM role](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) on your account:

* Create a [policy](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html) that allows listing and reading objects in the S3 buckets where your assets are located. It should be able to perform the following actions:
  * `s3:GetObject`
  * `s3:GetObjectVersion`
  * `s3:ListBucket`
  * `s3:GetBucketLocation`
* Create [an IAM role](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html) and attach the aforementioned policy to it.
* Create a Trust Relationship for said role that allows Felt to access your assets. Make sure to include all the principals listed below:

```json
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::949302143999:root",
                    "arn:aws:iam::452667257775:root",
                    "arn:aws:iam::375127086520:root",
                    "arn:aws:iam::033636008376:root"
                ]
            },
            "Action": "sts:AssumeRole"
        }
    ]
}
```

### Azure Storage connection string

For objects hosted in Azure Storage, provide a [connection string](https://learn.microsoft.com/en-us/azure/storage/common/storage-configure-connection-string#create-a-connection-string-using-a-shared-access-signature) to grant Felt access to your Azure storage account.

We recommend creating a dedicated [Shared Access Signature (SAS)](https://learn.microsoft.com/en-us/azure/storage/common/storage-sas-overview) with only **Read** and **List** permissions. Shared Access Signatures may be created at both the storage account level and the individual container level.

<details>

<summary>Creating an account-level SAS</summary>

* In Azure Portal, navigate to **Storage Accounts** and click on the desired account.
* In the left-hand sidebar, open the **Security + networking** dropdown and click on **Shared access signature**.
* Create a new SAS with access to all services and resources, and limit permissions to only **Read** and **List**.
* Click on **Generate SAS and connection string** and copy the **Connection string** to paste into Felt.

</details>

<details>

<summary>Creating a container-level SAS</summary>

* In Azure Portal, navigate to **Storage Accounts** and click on the desired account.
* In the left-hand sidebar click on **Storage browser**, then click on **Blob containers**.
* Identify the desired container and click on the three dots (**…**) at the far right of its row, then click on **Generate SAS**.
* Create a new SAS with access to all services and resources, and limit permissions to only **Read** and **List**.
* Click on **Generate SAS and connection string** and copy the **Connection string** to paste into Felt.

</details>

### Custom headers

Specify key/value pairs of custom headers to be added in each request. For example, if your STAC requires [Bearer Authentication](https://swagger.io/docs/specification/v3_0/authentication/bearer-authentication/):

* Header name: `Authorization`
* Value: `Bearer {YOUR_AUTH_TOKEN}`

### GCP Service Account JSON

To access objects stored in Google Cloud Storage, upload a JSON key file for [Service Account](https://cloud.google.com/iam/docs/service-account-overview) with access to the **Storage Object Viewer** role in the buckets of your choice.


# Stitching rasters into a mosaic with VRTs

Combine many raster tiles into a single mosaicked layer in Felt using a GDAL Virtual Raster (VRT).

When your imagery or elevation data is split across many separate raster files, you can present them to Felt as a single, seamless layer. A **Virtual Raster (VRT)** is a small XML file that references multiple source rasters and describes how they fit together. Felt reads the VRT and mosaics the sources on the fly, so you don't have to merge millions of pixels into one enormous file.

{% hint style="success" %}
This feature is only available to customers on the [Enterprise plan](https://felt.com/pricing). To upgrade, [contact sales](https://felt.com/sales).
{% endhint %}

{% hint style="info" %}
**When to use this:** VRT mosaics work best for combining rasters that cover a *contiguous* area at *similar or identical resolution* — for example metatiled elevation DEMs, digital orthophoto quarter quads (DOQQs), and similar tiled imagery products. They are not a good fit for representing sparse datasets scattered across a large area.
{% endhint %}

## Two ways to combine rasters

There are two approaches to turning a collection of raster files into one layer in Felt:

1. **Merge locally, then upload.** Use GDAL, QGIS, or rasterio to merge your tiles into a single large raster, then upload that file directly. This is straightforward for smaller datasets, but the merged file can become very large and slow to produce.
2. **Build a VRT and upload it.** Host your source rasters somewhere Felt can reach them (a cloud storage bucket or an HTTPS URL), build a small VRT that points at them, and upload just the VRT. Felt mosaics the sources on the fly.

For large collections of tiles or [Cloud Optimized GeoTIFFs (COGs)](/data-sources/raster-infrastructure/cloud-optimized-geotiffs), the VRT approach is recommended — the VRT itself is only a few kilobytes, and your source pixels never have to move or be duplicated. The rest of this guide focuses on building and uploading a VRT.

{% hint style="success" %}
We recommend storing the VRT in the same cloud source or bucket as the source rasters it references. When the VRT lives alongside its COGs, Felt streams the mosaic directly from those sources rather than normalizing everything into a single large COG at upload time.
{% endhint %}

## How a VRT works

A VRT is a plain-text XML file (see the [GDAL VRT driver documentation](https://gdal.org/en/stable/drivers/raster/vrt.html)). Rather than containing pixel data, it lists each source raster, where to find it, and where it sits in the combined mosaic. Because it's just a reference file, you can rebuild or edit it at any time without reprocessing your imagery.

## Building a VRT with gdalbuildvrt

The easiest way to create a VRT is with the [`gdalbuildvrt`](https://gdal.org/en/stable/programs/gdalbuildvrt.html) command from the [GDAL](https://gdal.org/en/stable/download.html) command line tools.

1. List the paths to your source rasters in a text file, one per line:

```
file1.tif
file2.tif
file3.tif
```

2. Build the VRT, pointing at that list:

```bash
gdalbuildvrt -input_file_list files.txt -r bilinear mosaic.vrt
```

The `-r` flag sets the resampling method used to build overviews and read between resolutions — use `bilinear` for continuous data like elevation or temperature, and `nearest` for categorical or integer data.

## Things to get right

A VRT will only mosaic correctly in Felt if a few details are set up properly. These are the most common reasons a VRT fails to display.

### Use a single projection across all sources

Every source raster referenced by a VRT must be in the same projection (CRS) — this is a hard requirement. If your sources use different projections, reproject the mismatched ones to a common CRS before building the VRT, for example with [`gdalwarp`](https://gdal.org/en/stable/programs/gdalwarp.html):

```bash
gdalwarp -t_srs EPSG:3857 source_in_other_crs.tif source_reprojected.tif
```

Once every source shares the same projection, build the VRT from the aligned files.

### Make sure your sources have overviews

Overviews (also called pyramids) are pre-computed, lower-resolution copies of a raster that let Felt stream the mosaic efficiently when you're zoomed out. `gdalbuildvrt` only writes the `<OverviewList>` tag into the VRT when the **source rasters already have overviews**. If your sources don't have them, the resulting VRT won't stream properly in Felt.

Before building your VRT, make sure each source raster has overviews — for example by storing them as [Cloud Optimized GeoTIFFs](/data-sources/raster-infrastructure/cloud-optimized-geotiffs), or by adding overviews with [`gdaladdo`](https://gdal.org/en/stable/programs/gdaladdo.html):

```bash
gdaladdo -r bilinear file1.tif 2 4 8 16 32
```

### Use paths Felt can reach

This is the single most common mistake: building a VRT on your own machine and uploading it while its `<SourceFilename>` entries still point at **local disk paths**. Felt can't read files on your computer, so the mosaic will be empty.

When your sources are remote, the `<SourceFilename>` entries must use a [GDAL virtual filesystem](https://gdal.org/en/stable/user/virtual_file_systems.html) prefix so Felt knows how to fetch them:

* `/vsicurl/https://host/path/file.tif` for files behind an HTTP(S) URL
* `/vsis3/bucket/key.tif` for files in Amazon S3

You can build the VRT directly against these paths by listing the virtual-filesystem paths in your `files.txt`, for example:

```
/vsis3/my-bucket/imagery/file1.tif
/vsis3/my-bucket/imagery/file2.tif
```

Also check the `relativeToVRT` attribute on each `<SourceFilename>`:

* `relativeToVRT="0"` means the path is absolute (use this for `/vsicurl/` and `/vsis3/` paths).
* `relativeToVRT="1"` means the path is interpreted relative to the VRT file's own location.

Open the VRT in a text editor before uploading and confirm every `<SourceFilename>` points at a location Felt can reach, not a path from the machine where you built it.

### Precompute statistics

By default, Felt recalculates summary statistics (min, max, mean, and standard deviation) across the entire mosaic when the VRT is uploaded, so it can pick appropriate color ramps and styling. For a large mosaic this can be slow and may surface errors.

You can avoid this by precomputing non-approximate statistics on each source raster ahead of time so the values are already stored in the files. Computing stats on the VRT itself also helps:

```bash
gdalinfo -stats mosaic.vrt
```

For more detail on optimizing large mosaics, see [Raster streaming best practices](/data-sources/raster-infrastructure/raster-streaming-best-practices).

## Uploading the VRT to Felt

Once your VRT references reachable sources, upload the `.vrt` file to Felt the same way you would any other raster. Felt reads the VRT, fetches the source rasters, and presents them as a single mosaicked layer that you can [style](/layers/styling/raster-layers) like any other raster.

## Uploading a VRT via the API

Once the VRT is stored in your cloud bucket alongside its source rasters, you can add it to a map programmatically with Felt's upload endpoint by passing the VRT's URL as `import_url`. Felt resolves the source rasters referenced by the VRT and mosaics them, exactly like a UI upload.

```bash
curl -X POST "https://felt.com/api/v2/maps/<MAP_ID>/upload" \
  -H "Authorization: Bearer <YOUR_API_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{"import_url": "gs://your-bucket/mosaic.vrt", "name": "Raster mosaic"}'
```

The `import_url` can be a `gs://`, `s3://`, or public `https://` URL. For a private bucket, [connect the bucket as a source](/data-sources/cloud-sources) with credentials in Felt first; the upload then authenticates using that connected source. A fully public VRT (with `/vsicurl/` source paths) needs no credentials.

For the full request and response reference, see the [REST API upload documentation](https://developers.felt.com/rest-api/uploading-files-and-urls).

{% hint style="info" %}
Because the VRT lives in your bucket alongside its source rasters, this approach is a good fit for API-driven and automated workflows — for example pipelines that drop new rasters into a bucket and add or refresh the mosaic on a map programmatically.
{% endhint %}

{% hint style="info" %}
Need a hand getting a large mosaic set up? Contact our team at <support@felt.com>.
{% endhint %}


# Raster streaming best practices

Best practices for streaming raster data into Felt.

Streaming Cloud Optimized GeoTIFFs (COGs) into Felt allows you to work with massive raster datasets without uploading them directly to Felt's servers. By creating a Virtual Raster (VRT) that references COGs stored in your cloud storage, you can visualize terabyte-scale datasets efficiently. However, performance depends on several key factors that you should optimize for the best experience.

{% hint style="success" %}
This feature is only available to customers on the [Enterprise plan](https://felt.com/pricing). To upgrade, [contact sales](https://felt.com/sales).
{% endhint %}

## How streaming performance works

When you stream rasters into Felt, the platform fetches data on-demand from your cloud storage to generate map tiles. Performance is determined by three main factors:

1. **Source GeoTIFF format and configuration:** how your individual COG files are structured
2. **Storage location**: where your files are hosted and network latency
3. **Geographical scope of source files:** the geographic area each file covers relative to the map tiles being requested

### Best practices

Check out [#optimization-strategies](#optimization-strategies "mention") for in-depth details.

* Use properly formatted Cloud Optimized GeoTIFFs with 512×512 internal blocks
* Create larger-footprint files (covering more geographic area) for better low-zoom performance
* Host files in AWS S3, preferably in the same region as Felt
* Set visibility limits to hide layers at zoom levels where they perform poorly
* Test with smaller datasets before deploying full-scale data
* Include pre-calculated overviews in your COGs

**Avoid:**

* Using many small-footprint GeoTIFF files (like 1° × 1°) if you need good low-zoom performance
* Hosting files in storage with high latency or cross-region access
* Attempting to render global datasets at very low zoom levels without optimization
* Skipping internal tiling or overviews in your COG files

### Understanding zoom level limitations

The performance of streamed rasters varies significantly by zoom level. As you zoom out to view larger areas, Felt must fetch overview data from more individual GeoTIFF files to construct each map tile.

#### Example

Assume we have a dataset with 1° × 1° GeoTIFF files, here's approximately how many files need to be accessed per tile at each zoom level:

* **Zoom 10-8**: 1-2 files (excellent performance)
* **Zoom 7**: 6 files (good performance)
* **Zoom 6**: 24 files (acceptable performance)
* **Zoom 5**: 90 files (performance degradation begins)
* **Zoom 4**: 333 files (slow performance)
* **Zoom 3**: 1,150+ files (very slow, likely timeouts)
* **Zoom 2 and below**: 5,000+ files (will not work)

If the system cannot fetch and process all required data in time, the tile request will fail.

## Optimization strategies

### 1. Optimize GeoTIFF file configuration

Ensure your COG files are properly formatted:

Recommended settings:

* **Internal tiling**: Use 512×512 pixel blocks (optimal for web tile generation)
* **Compression**: Use LZW or DEFLATE compression to reduce file size
* **Overviews**: Include multiple overview levels (pyramids) in each GeoTIFF
* **File format**: Verify files are true Cloud Optimized GeoTIFFs

You can create properly formatted COGs using GDAL, for example:

```bash
gdal_translate input.tif output.tif \
  -co TILED=YES \
  -co BLOCKXSIZE=512 \
  -co BLOCKYSIZE=512 \
  -co COMPRESS=DEFLATE \
  -co COPY_SRC_OVERVIEWS=YES \
  -co BIGTIFF=IF_SAFER
```

### 2. Increase individual GeoTIFF footprints

The most effective way to improve lower-zoom performance is to create larger-area COG files. Instead of many small files (like 1° × 1°), consider creating files that cover larger geographic extents (like 5° × 5° or 10° × 10°). The benefits are:

* Fewer individual files need to be accessed per tile request
* Larger files have additional overview levels that can be used at lower zoom levels
* Optimizes the number of network requests required

There are some trade-offs to consider

* Larger individual files take longer to process initially
* This approach may be less convenient for regional data access
* Requires regenerating your dataset

### 3. Set appropriate visibility limits

If your dataset performs poorly at lower zoom levels, prevent rendering issues by setting visibility constraints. There are two ways you can do this in Felt:

[Layer-level limits](https://help.felt.com/layers/styling/vector-layers#zoom-based-styling)

1. Select your raster layer
2. Open layer settings
3. Set **Limit visibility** to only show at appropriate zoom levels (e.g., zoom 6 and higher)

[Map constraints](https://help.felt.com/dashboards-and-apps/map-settings#map-constraints)

1. Open map settings
2. Set map constraints to prevent zooming out beyond viable zoom levels

#### 4. Consider VRT statistics

If you're using a VRT file, pre-calculate summary statistics to improve initial rendering. You can use GDAL to do this:

```bash
gdalinfo -stats your_file.vrt
```

Without pre-calculated stats, Felt may need to scan the entire dataset to determine appropriate color ramps and styling, which can be slow for large datasets.

## Testing

When working with large streaming datasets, follow this testing approach:

1. **Start small**: Test with a subset of your data (e.g., 10-20 GB) first
2. **Test at different zoom levels**: Navigate to various zoom levels and note where performance degrades
3. **Monitor tile load times**: Watch the network requests in your browser's developer tools
4. **Iterate on optimization**: Adjust your COG configuration based on performance results
5. **Scale up gradually**: Once optimized, test with progressively larger datasets

## Troubleshooting

If you're working with a large streaming raster dataset and encountering performance issues, reach out to [Felt's support team](mailto:support@felt.com). They can help analyze your specific use case and provide guidance on optimization strategies.


# Files

Upload GIS files to Felt with support for multiple formats including Shapefiles, GeoJSON, and KML.

{% embed url="<https://www.youtube.com/watch?v=zgadqdMMYp0>" fullWidth="false" %}

Felt supports a wide range of geospatial file formats with **Upload Anything**. Upload everything from vector data like Shapefiles and GeoJSON to [raster imagery](/upload-anything/raster-and-imagery) and [spreadsheets](/upload-anything/spreadsheets) with location information, or add data directly from [URLs](/upload-anything/urls).

You can easily upload data by dragging and dropping files directly on your map or by clicking the ![](/files/LykIpn1aK77DZiwFt60G) icon in the [tools](/getting-started/tour-the-interface#tools) section of the toolbar.

<figure><img src="/files/eTD2fs3uSOI3ZSXjzKfd" alt="" width="375"><figcaption></figcaption></figure>

## Supported file types

Felt supports many raster and vector file formats, up to 5GB in size. Files can be provided in their original format or optionally compressed as `.zip`, `.gz`, or `.tar`. See [Limits](/upload-anything/limits) for all upload and capacity limits.

### Vector data

Felt reads most common vector data formats, including:

* ESRI Shapefile (`.shp`)
* GeoJSON (`.geojson`)
* GeoPackage (`.gpkg`)
* GeoParquet (`.parquet`)
* Geodatabase (folder ending in `.gdb`, must be zipped)
* KML (`.kml`) and KMZ (`.kmz`)
* GPS formats like `.gpx`, `.tcx`, and `.fit`
* ArcGIS Layer Packages (`.lpk`, `.lpkx`) and Map Packages (`.mpk`, `.mpkx`)
* Other less-popular formats [supported by GDAL](https://gdal.org/drivers/vector/index.html) and [GPSBabel](https://www.gpsbabel.org/capabilities.html)

A projection must be provided for formats not using a WGS84 projection.

### Raster data

Felt can read raster data like aerial and satellite imagery, Digital Elevation Models (DEMs), surface temperature measurements in a variety of formats:

* GeoTIFFs (`.tif`, `.tiff`)
* Raster GeoPackages (`.gpkg`)
* ASCII grids (`.asc`, `.xyz`)
* Common image formats like PNG and JPEG if an auxiliary World File (`.wld`, `.pnw`, `.jpw`, etc) is provided.

Check out the [Raster and imagery](/upload-anything/raster-and-imagery) page to learn more.

### Spreadsheets

Felt can read geospatial data from tabular file formats like Excel spreadsheets (`.xls`, `.xlsx`), CSV files (`.csv`, `.tsv`, `.txt`, etc), and Numbers files (`.numbers`).

Check out the [Spreadsheets](/upload-anything/spreadsheets) page to learn more.

### Images & PDFs

Felt can overlay images and PDFs on a map. Supported formats include `.jpg`, `.png`, `.heic`, `.webp`, `.svg`, `.pdf`, and many more. The max size an image can be is 20MB.

### AutoCAD

Felt supports AutoCAD drawings in both the Drawing eXchange Format (`.dxf`) and the native AutoCAD Drawing format (`.dwg`).

{% hint style="info" %}
Entities that depend on proprietary object types from AutoCAD vertical products may be skipped during processing. For example, Civil 3D surfaces, corridors, or alignments will be skipped. Explode those objects into plain AutoCAD geometry before saving the drawing to keep them.
{% endhint %}

For a drawing to be properly georeferenced all of the following must be true:

1. **The drawing has a coordinate system assigned.** AutoCAD stores the assignment inside the drawing as a `GEODATA` object. It is created when you assign a coordinate system in AutoCAD Map 3D or Civil 3D, or set a geographic location in AutoCAD with the `GEOGRAPHICLOCATION` command (AutoCAD 2010 and newer).
2. **The assigned coordinate system is stored in a standard form.** Felt can interpret the assignment when the drawing stores it as WKT text or a standard authority code (such as an EPSG code). Some drawings store only an Autodesk-specific coordinate system code (such as `WI83-CF`), which Felt cannot interpret.
3. **The coordinate system is earth-based.** Assignments describing local, "non-earth" coordinate systems are ignored.
4. **Geometry is drawn at real coordinates in the assigned system.** Felt interprets the drawing's model space coordinates directly in the assigned coordinate system. It does not apply local offsets or reference-point transformations stored alongside a geographic location marker.

When any of these conditions is not met, Felt falls back to guessing a coordinate system from the extent of the drawing's coordinates.

### Layer groups

Some file uploads may result in layers with multiple datasets in them. For example, an Excel file with multiple tabs, or a zip file with multiple Shapefiles inside. Read more in [Group](/layers/group).

## Troubleshooting

See the [Troubleshooting](/upload-anything/troubleshooting) page for common upload failures and how to fix them.

## Frequently asked questions

<details>

<summary>What file size limit does Felt support for uploads?</summary>

Felt supports files up to 5GB in size, whether they're uploaded in their original format or compressed as `.zip`, `.gz`, or `.tar` files.

</details>

<details>

<summary>How do I upload files to Felt?</summary>

You can upload files in two ways: either drag and drop files directly onto your map, or click the upload icon <img src="/files/x7GrwSiIuNExGuGsSHuh" alt="" data-size="line"> in the tools section of the toolbar.

</details>

<details>

<summary>Can I upload compressed files to Felt?</summary>

Yes, you can upload compressed files in `.zip`, `.gz`, or `.tar` formats. This is optional - you can also upload files in their original, uncompressed format.

</details>

<details>

<summary>What should I do if my vector data doesn't use WGS84 projection?</summary>

For vector formats that don't use WGS84 projection, you must provide a projection file with your upload. This ensures Felt can properly display your data on the map.

</details>

<details>

<summary>Can I upload Excel spreadsheets with location data?</summary>

Yes, Felt can read geospatial data from Excel spreadsheets (`.xls`, `.xlsx`), as well as CSV files and Numbers files. Check [Spreadsheets](/upload-anything/spreadsheets) for more details on formatting requirements.

</details>

<details>

<summary>Does Felt support aerial imagery and satellite data?</summary>

Yes, Felt supports raster data including aerial imagery, satellite imagery, Digital Elevation Models (DEMs), and surface temperature measurements in formats like GeoTIFF, raster GeoPackages, and ASCII grids. See [Raster and imagery](/upload-anything/raster-and-imagery).

</details>

<details>

<summary>What happens when I upload a file with multiple datasets?</summary>

Files containing multiple datasets (like an Excel file with multiple tabs or a zip file with multiple Shapefiles) will create layer groups in Felt, keeping related data organized together. You can upload up to 50 layers within one upload.

</details>

<details>

<summary>Can I upload AutoCAD files to Felt?</summary>

Yes, Felt supports both `.dxf` and `.dwg` files. A drawing is georeferenced when it has a standard, earth-based coordinate system assigned in AutoCAD; otherwise Felt guesses a coordinate system from the drawing's coordinates. See the [AutoCAD](#autocad) section for the full requirements.

</details>

<details>

<summary>Can I upload regular images and PDFs to my map?</summary>

Yes, Felt can overlay images and PDFs on your map. Supported formats include `.jpg`, `.png`, `.heic`, `.webp`, `.svg`, `.pdf`, and many more.

</details>

<details>

<summary>What GPS file formats does Felt support?</summary>

Felt supports common GPS formats including .gpx, .tcx, and .fit files, making it easy to upload tracks and waypoints from GPS devices and fitness apps.

</details>

<details>

<summary>Do I need special software to prepare files for Felt?</summary>

No, Felt reads most common formats directly through GDAL and GPSBabel support. However, for certain formats like Geodatabases (.gdb), you'll need to zip the folder before uploading.

</details>

<details>

<summary>What should I do if my file upload fails?</summary>

Check the [Troubleshooting](/upload-anything/troubleshooting) in the documentation for common upload failures and their solutions. This resource covers the most frequent issues users encounter and how to fix them.

</details>


# URLs

Connect to external map services and data sources by adding data directly from URLs.

<div align="center"><figure><img src="/files/n8MvoR5rTEB9kWoDeFnJ" alt="" width="375"><figcaption></figcaption></figure></div>

No files? No problem! You can add any of the supported [file formats](/upload-anything/files) directly as a URL by clicking **Upload Anything** ![](/files/LykIpn1aK77DZiwFt60G) in the [tools](/getting-started/tour-the-interface#tools) section of the toolbar or by directly pasting the URL onto your map (**Cmd+V** / **Ctrl+V**).

Felt supports adding data from publicly accessible URLs such as:

* [ESRI: FeatureServer, MapServer and ImageServer](#esri-mapserver-featureserver-and-imageserver)
* [External Vector Tiles](#external-vector-tiles)
* [Google MyMaps](#google-mymaps)
* [Google Sheets](#google-sheets)
* [SharePoint & OneDrive](#sharepoint-and-onedrive)
* [XYZ Raster Tiles](#xyz-raster-tiles)
* OGC Web Services: [WMS, WMTS and WFS](#wms-wmts-and-wfs)
* Flat files: all of the file formats [in this page](/upload-anything/files), hosted at a URL

For example, simply paste the following URL to add country data from Natural Earth to your Felt map:

```jsx
https://www.naturalearthdata.com/http//www.naturalearthdata.com/download/10m/cultural/ne_10m_admin_0_countries.zip
```

## ESRI MapServer, FeatureServer & ImageServer

Ever found yourself on a page [like this](https://gisweb.birminghamal.gov/arcgis/rest/services/EssentialsPublic/MapServer) without knowing what to do? Many public data sources are only available as ESRI MapServers or FeatureServers, which are hard to work with. Fortunately, you can simply paste the URL into Felt and let us do the work.\
\
Felt supports two kinds of ESRI server URLs:

* URLs ending in a number (like `/MapServer/0`) point to a single layer in the server and will result in a single-dataset layer inside Felt. [Example.](https://geodata.epa.gov/arcgis/rest/services/OAR_OAP/GlacierNationalPark/MapServer/0)
* URLs ending in `/MapServer` (or `/FeatureServer` or `/ImageServer`) point to the whole server, which may contain many layers. Uploading one of these to Felt will result in a multi-dataset layer. [Example.](https://geodata.epa.gov/arcgis/rest/services/OAR_OAP/GlacierNationalPark/MapServer)

To add services that require an API token, you can access it via the [ESRI Feature Server](/data-sources/cloud-sources/esri-feature-service) cloud source.

{% hint style="info" %}
**Tip:** For publicly available feature servers simply copy the URL then paste it directly on your map. Felt will automatically recognize and add the data as a layer.
{% endhint %}

### Streaming services

{% hint style="success" %}
This feature is only available to customers on the [Enterprise plan](https://felt.com/pricing). To upgrade, [contact sales](https://felt.com/sales).
{% endhint %}

<figure><img src="/files/pc8WyCtCfO0rNEd0Bi1e" alt="" width="563"><figcaption></figcaption></figure>

If you are connecting to large ESRI Map or Feature services, enable Streaming for optimal performance. When enabled, Felt loads only the data visible within the current map view which significantly improves performance for large, complex, or global-scale services. Learn more about styling streaming services [here](/layers/styling/vector-layers#styling-vector-tiles).

{% hint style="warning" %}
Data table views, statistics, filters, and dashboard components are not available for streaming vector data layers.
{% endhint %}

## External vector tiles

You can add external vector tile sources directly into your maps using TileJSON URLs to stream data from external hosts and visualize large, global, or frequently updating datasets — a way to go well beyond the browser-upload [Limits](/upload-anything/limits). You can also set [refresh intervals](/layers/refreshing-data) to keep your map current with the latest data.

{% hint style="success" %}
This feature is only available to customers on the [Enterprise plan](https://felt.com/pricing). To upgrade, [contact sales](https://felt.com/sales).
{% endhint %}

#### Adding vector tile layers

{% hint style="warning" %}
When adding a TileJSON source, you'll need to manually specify whether your data contains points, lines, or polygons. This step is necessary for proper rendering and styling of your vector tile layers.
{% endhint %}

* Click ![](/files/LykIpn1aK77DZiwFt60G) in the [tools](/getting-started/tour-the-interface#tools) section of the toolbar and choose the option **From URL...**
* Paste in a valid TileJSON endpoint and click **Next.** Felt will automatically read the Min zoom level, Max zoom level, Bounds and Layer IDs from the source

<figure><img src="/files/gbgYzHPA0OyFVMcU3EAC" alt="" width="375"><figcaption></figcaption></figure>

* Next, select which tileset Layer IDs to add and the Geometry type for each and click **Add to map**

<figure><img src="/files/f3nWWC8zXCRNwk8gCAbH" alt="" width="375"><figcaption></figcaption></figure>

{% hint style="warning" %}
Data table views, statistics, filters, and dashboard components are not available for streaming vector data layers.
{% endhint %}

## Google MyMaps

{% embed url="<https://www.youtube.com/watch?t=8s&v=EzXBi8XP0B0>" %}

Add all the layers in your MyMaps directly into a Felt map by just copying and pasting the MyMaps link!

**Tips:**

* Make sure that your MyMaps share permissions have been updated so **Anyone with this link can view** is turned ON
* Copy and paste the link directly in onto the map in Felt and click the **Add to map** option in the popup

## Google Sheets

{% embed url="<https://www.youtube.com/watch?v=JVjatrCB7wk>" %}

Links to Google Sheets will behave just like regular spreadsheets and CSV files provided they are **public**. This means they must be viewable by anyone with the link.

<div align="center"><figure><img src="/files/P2HXiZyx4tLtHvKMVSn3" alt="" width="375"><figcaption></figcaption></figure></div>

## SharePoint & OneDrive

Links to spreadsheets and other supported files stored in SharePoint or OneDrive behave just like regular file uploads. Copy the file's share link and paste it onto your map, or add it with **Upload Anything** — Felt reads the file directly from Microsoft and names the layer after it.

**Tips:**

* Share the file so that "Anyone with the link" can view it. Links restricted to people in your organization require signing in, and Felt will ask you to update the file's sharing settings.
* Use "Share" → "Copy link" on a single file. Links to folders or document library views aren't supported — share the individual file instead.
* Company SharePoint links (`yourcompany.sharepoint.com`) and personal OneDrive links (`1drv.ms`, `onedrive.live.com`) both work.

## WMS, WMTS and WFS

Felt supports OGC URLs that point to *public* services from the following Open Geospatial Consortium standards:

* **Web Map Services (WMS)** and **Web Map Tile Services (WMTS)**: added as raster layers.
* **Web Feature Services**, added as vector layers.

{% embed url="<https://youtu.be/pS1kh62c7PI?feature=shared>" %}

* **WMS** are similar to raster XYZ sources but are not pre-tiled, which means Felt creates tiles when adding a WMS service. This counts toward the Felt data processing limits.
* **WMTS** are similar to raster XYZ sources and are pre-tiled sources, so Felt skips the tile creation process when adding a WMTS source and these sources do not count toward data processing in Felt.
* **WFS** serve vector features (similar to ESRI Feature Services) and can be styled in Felt like any other vector layer. Adding these services does count toward data processing in Felt.

## XYZ raster tiles

Tiled raster services in XYZ (slippy maps) can also be added as URLs. However, they must be added as *template URLs*, which means the URL must contain the following parts: `{z}` (zoom), `{x}` (row) and `{y}` (column). Instead of the `{y}` parameter, `{-y}` may also be used to indicate that tiles are served in [TMS](https://wiki.osgeo.org/wiki/Tile_Map_Service_Specification) format. They must also end in `.png`, `.jpg` or `.jpeg`.

Here’s an example raster URL of the city of Aberdeen from the National Library of Scotland:

```jsx
https://geo.nls.uk/maps/towns/aberdeen/{z}/{x}/{-y}.png
```

Learn more in the [Raster & Imagery](/upload-anything/raster-and-imagery) page.

## Troubleshooting

#### Supported coordinate reference systems

Felt displays tiles in the Web Mercator projection (code `EPSG:3857`). For tiles from a WMS or WMTS server to be displayed in Felt, they must be served from a compatible TileMatrixSet, usually called `GoogleMapsCompatible`.

Users do not need to specify which TileMatrixSet needs to be used. However, if Felt does not find any compatible ones in the server, an error will be returned.

#### Maximum layers per upload

Felt will automatically try to parse and upload all layers from the service. However, Felt has a maximum of 50 layers per upload (see [Limits](/upload-anything/limits)). If the service hosts more than that amount, an error will be returned.

For OGC services, users can work around this by specifying which layers to request in the URL query parameters:

* *WMTS* and *WFS*: a single layer in the form of `?layer=X`
* *WMS*: one or more layers in the form of `?layers=X,Y`

## Frequently asked questions

<details>

<summary>What types of URLs can I upload to Felt?</summary>

You can add data from publicly accessible URLs including ESRI services (FeatureServer, MapServer, ImageServer), external vector tiles, Google MyMaps, Google Sheets, SharePoint, XYZ raster tiles, and OGC Web Services (WMS, WMTS, WFS). You can also add any of Felt's supported file formats that are hosted at a URL.

</details>

<details>

<summary>How do I add URL data to my map?</summary>

Click the upload icon ![](/files/Ue0b7vgnApvpJHEmjpMK) in the toolbar and select **From URL**, or simply paste the URL directly onto your map using Cmd+V (Mac) or Ctrl+V (Windows). Felt will automatically recognize and add the data as a layer.

</details>

<details>

<summary>What's the difference between ESRI URLs ending in a number versus those ending in /MapServer?</summary>

URLs ending in a number (like /MapServer/0) point to a single layer and will create one dataset layer in Felt. URLs ending in /MapServer, /FeatureServer, or /ImageServer point to the entire server containing multiple layers and will create a multi-dataset layer in Felt. Note that Felt has a maximum of 50 layers per upload.

</details>

<details>

<summary>How can I connect to ESRI services that require authentication or an API token?</summary>

For services that require an API token or authentication, you'll need to connect them as a **cloud source** in Felt rather than using the direct URL method. This allows you to securely provide your credentials. See [ESRI Feature Server](/data-sources/cloud-sources/esri-feature-service) for more details.

</details>

<details>

<summary>What is streaming and when should I use it?</summary>

Streaming is an Enterprise-plan feature that loads only the data visible in your current map view, which significantly improves performance for large, complex, or global-scale ESRI Map or Feature services. However, note that data table views, statistics, filters, and dashboard components are not available for streaming vector data layers.

</details>

<details>

<summary>Can I add external vector tiles to my map?</summary>

Yes, and this feature is only available on the Enterprise plan.

You can add external vector tile sources using TileJSON URLs. When adding them, you'll need to manually specify whether your data contains points, lines, or polygons. Keep in mind that data table views, statistics, filters, and dashboard components are not available for streaming vector data layers.

</details>

<details>

<summary>How do I get all my data from Google MyMaps into Felt?</summary>

Make sure your MyMaps share permissions are set so "Anyone with this link can view" is turned ON. Then copy and paste the MyMaps link directly onto your map in Felt and click **Add to map** in the popup.

</details>

<details>

<summary>What requirements do Google Sheets have to work when added as a URL?</summary>

Google Sheets must be public and viewable by anyone with the link. Once they meet this requirement, they'll behave just like regular spreadsheets and CSV files in Felt.

</details>

<details>

<summary>What requirements do SharePoint and OneDrive links have to work when added as a URL?</summary>

The file must be shared so anyone with the link can view it, and the link must point to a single file rather than a folder. Once that's set, SharePoint and OneDrive files behave just like regular spreadsheets and CSV files in Felt. Links that require signing in to a Microsoft account will show an error asking you to update the file's sharing settings.

</details>

<details>

<summary>What coordinate reference system does Felt support for tile services?</summary>

Felt displays tiles in the Web Mercator projection (EPSG:3857). For tiles from WMS or WMTS servers to display properly, they must be served from a compatible TileMatrixSet, usually called GoogleMapsCompatible. Felt will automatically detect compatible tile sets, but will return an error if none are found.

</details>

<details>

<summary>Is there a limit to how many layers I can upload from a service at once?</summary>

Yes, Felt has a maximum of 50 layers per upload. If your service hosts more than 50 layers, you'll receive an error. For OGC services, you can work around this by specifying which layers to request in the URL query parameters (e.g., ?layer=X for WMTS/WFS, or ?layers=X,Y for WMS).

</details>


# Spreadsheets

Upload and map Excel, CSV and Google Sheets data for location-based visualization.

<figure><img src="/files/z95w0p8Np7uwziOHwCtG" alt="" width="563"><figcaption></figcaption></figure>

Tabular data such as spreadsheets can reference geography in many forms: explicitly with lat/lon points and geometries, or implicitly with zip codes, place names, or street addresses. When you upload a spreadsheet, Felt uses AI to identify the geometry columns in your data and depending on the type of geometry will either use Geocoding or Geomatching.

## Geocoding

Sometimes, our data doesn’t have explicit coordinates, such as latitudes and longitudes. Instead, we might have *implicit* geospatial data, such as names of street addresses. *Geocoding* is the process of converting address data into points.

To visualize address data make sure your fields have appropriate names, then drag and drop your spreadsheet or CSV directly into a map!

{% hint style="info" %}
By default, Felt will geocode address data for up to 10,000 addresses per upload. If you need a higher limit, [contact sales](https://felt.com/sales) to upgrade to our [Enterprise plan](https://felt.com/pricing).
{% endhint %}

### Preparing address data

Address fields should be given easy-to-find names, such as:

* <mark style="color:red;">`address`</mark> for single fields with complete address
* <mark style="color:red;">`number`</mark> & <mark style="color:red;">`street`</mark> for house numbers and street names
* <mark style="color:red;">`city`</mark> or <mark style="color:red;">`locality`</mark> for place names
* <mark style="color:red;">`zip`</mark> for postal code
* <mark style="color:red;">`state`</mark>, <mark style="color:red;">`region`</mark>, or <mark style="color:red;">`province`</mark> for first-order administrative divisions like U.S. states
* <mark style="color:red;">`country`</mark> for countries

### Reviewing accuracy

Geocoding isn’t a perfect process. Much like a search engine, sometimes you might not find exactly what you’re looking for, depending on both your input and the data that’s available.

Fortunately, Felt lets you review the quality of your geocoding upload, and also download the results so you can fine-tune your input if needed.

You can toggle the Geocoding Results any time you want from the table view by clicking **See full report** in the **Found** column and even download the results to fix issues and reupload.

{% 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>" %}

## Geomatching

Tables often reference countries, states, zip codes or other regions without including the geometry themselves. Historically, you’d have to join this data with other datasets to work with it on a map. Felt does this automatically with **Geomatching**.

{% 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>" %}

### Available geomatching regions

Data will be checked for the geographic regions listed below and converted to polygon geometries when possible. Optionally, hints present in the column name can be used to choose among valid matches, such as “zip” used to name a column of U.S. ZIP codes.

<table data-full-width="false"><thead><tr><th></th><th width="233">Source</th><th>Example Values</th><th>Column Name Hints</th></tr></thead><tbody><tr><td><strong>Countries</strong></td><td><a href="https://www.naturalearthdata.com/blog/admin-0-countries-point-of-views/">Natural Earth Admin 0</a> United States point of view</td><td>Names: <mark style="color:red;"><code>United States, Ukraine</code></mark><br>ISO 3166-1 alpha-2 codes: <mark style="color:red;"><code>US, UA</code></mark><br>ISO 3166-1 alpha-3 codes: <mark style="color:red;"><code>USA, UKR</code></mark></td><td><mark style="color:red;"><code>country, nation, adm0, admin0, admin-0</code></mark></td></tr><tr><td><strong>Global First-Order Admin Areas</strong></td><td><a href="https://www.naturalearthdata.com/downloads/10m-cultural-vectors/10m-admin-1-states-provinces/">Natural Earth Admin 1</a> States, provinces, etc.</td><td>Names: <mark style="color:red;"><code>California, Kiev</code></mark><br>ISO 3166-2 codes: <mark style="color:red;"><code>US-CA, UA-32</code></mark><br>Admin-1 codes: <mark style="color:red;"><code>USA-3521, UKR-321</code></mark></td><td><mark style="color:red;"><code>state, province, adm1, admin1, admin-1</code></mark></td></tr><tr><td><strong>Global Time Zones</strong></td><td><a href="https://github.com/evansiroky/timezone-boundary-builder">OSM Timezone Boundary Builder</a></td><td>Names: <mark style="color:red;"><code>America/Los_Angeles, Europe/Kyiv</code></mark></td><td><mark style="color:red;"><code>tz, tzinfo, timezone, time zone</code></mark></td></tr><tr><td><strong>EU Statistical Units (NUTS 1)</strong></td><td><a href="https://ec.europa.eu/eurostat/web/gisco/geodata/reference-data/">Eurostat GISCO Reference Data</a></td><td>Names: <mark style="color:red;"><code>Thüringen, Αττική</code></mark><br>NUTS codes: <mark style="color:red;"><code>DEG, EL3</code></mark></td><td><mark style="color:red;"><code>state, province, region, nuts</code></mark></td></tr><tr><td><strong>EU Statistical Units (NUTS 2)</strong></td><td><a href="https://ec.europa.eu/eurostat/web/gisco/geodata/reference-data/">Eurostat GISCO Reference Data</a></td><td>Names: <mark style="color:red;"><code>Lazio, Θεσσαλία</code></mark><br>NUTS codes: <mark style="color:red;"><code>ITI4, EL61</code></mark></td><td><mark style="color:red;"><code>state, province, region, nuts</code></mark></td></tr><tr><td><strong>EU Statistical Units (NUTS 3)</strong></td><td><a href="https://ec.europa.eu/eurostat/web/gisco/geodata/reference-data/">Eurostat GISCO Reference Data</a></td><td>Names: <mark style="color:red;"><code>Eure-et-Loir, Essex Thames Gateway</code></mark><br>NUTS codes: <mark style="color:red;"><code>FRB02, UKH37</code></mark></td><td><mark style="color:red;"><code>state, province, region, nuts</code></mark></td></tr><tr><td><strong>EU Local Admin. Units (LAU)</strong></td><td><a href="https://ec.europa.eu/eurostat/web/gisco/geodata/reference-data/">Eurostat GISCO Reference Data</a></td><td><p>Names: <mark style="color:red;"><code>Eggendorf im Traunkreis,Čejč LAU codes: AT_41004, 586099 GISCO</code></mark></p><p>codes: <mark style="color:red;"><code>AT_41004, CZ_586099</code></mark></p></td><td><mark style="color:red;"><code>municipio, municipality, commune, comuni, gemeinde, lau</code></mark></td></tr><tr><td><strong>US States</strong></td><td><a href="https://www2.census.gov/geo/tiger/TIGER2022/STATE/tl_2022_us_state.zip">U.S. Census 2022 boundary file</a></td><td>Names: <mark style="color:red;"><code>California, New York</code></mark><br>Postal codes: <mark style="color:red;"><code>CA, NY FIPS</code></mark> codes: <mark style="color:red;"><code>06,04000US36, 0400000US48</code></mark></td><td><mark style="color:red;"><code>state</code></mark></td></tr><tr><td><strong>US Counties</strong></td><td><a href="https://www2.census.gov/geo/tiger/TIGER2021/COUNTY/tl_2021_us_county.zip">U.S. Census 2021 boundary file</a></td><td>FIPS codes: <mark style="color:red;"><code>06001, 05000US36061, 0500000US48453</code></mark></td><td><mark style="color:red;"><code>county</code></mark></td></tr><tr><td><strong>US CBSAs</strong></td><td><a href="https://www2.census.gov/geo/tiger/TIGER2021/CBSA/tl_2021_us_cbsa.zip">U.S. Census 2022 boundary file</a></td><td><p>Names: <mark style="color:red;"><code>San Francisco-Oakland-Berkeley, CA, New York-Newark-Jersey City, NY-NJ-PA Metro</code></mark><br>Area FIPS codes: <mark style="color:red;"><code>41860, 33000US35620,</code></mark></p><p><mark style="color:red;"><code>3300000US12420</code></mark></p></td><td><mark style="color:red;"><code>cbsa</code></mark></td></tr><tr><td><strong>US Zip Codes (ZCTAs)</strong></td><td><a href="https://postalpro.usps.com/ZIP_Locale_Detail">USPS ZIP locale detail</a> <a href="https://www2.census.gov/geo/tiger/TIGER2012/ZCTA5/tl_2012_us_zcta510.zip">U.S. Census 2012 boundary file</a> <a href="https://www2.census.gov/geo/tiger/TIGER2022/ZCTA520/tl_2022_us_zcta520.zip">U.S. Census 2022 boundary file</a></td><td>ZIP codes: <mark style="color:red;"><code>94612, 06511</code></mark></td><td><mark style="color:red;"><code>zip, zipcode, postcode</code></mark></td></tr><tr><td><strong>US Census Tracts</strong></td><td><a href="https://www2.census.gov/geo/tiger/TIGER2022/COUNTY/tl_2022_us_county.zip">U.S. Census 2022 boundary file</a></td><td>FIPS codes: <mark style="color:red;"><code>06001402900, 14000US09170141900, 1400000US48453001103</code></mark></td><td><mark style="color:red;"><code>tract</code></mark></td></tr></tbody></table>

### H3 geomatching

When a spreadsheet contains H3 identifiers, Felt automatically detects and geomatches them to hexagonal cells at the encoded resolution.

#### Supported H3 formats

Felt will automatically detect and process both hexadecimal string (e.g., `8928308280fffff`) and integer (e.g., `613196848522715135`) representations of H3 identifiers.

{% hint style="info" %}
The H3 level detected from your IDs is automatically used as the default resolution for display.
{% endhint %}

To ensure Felt correctly identifies and maps your H3 data:

* Column headers should be clearly labeled (e.g., `h3_id`, `h3_index` )
* H3 indexes should be in standard format without additional characters
* All H3 indexes should be at the same resolution level

If H3 identifiers aren't automatically geomatched:

* Open Geometry settings by clicking the ![](/files/T5UtgrJLQvJp1yFPZmYs) icon in the upper right of the [table](/layers/table-view)
* Select **H3** as the **Area type**, choose the correct **H3 column**, then click **Update spreadsheet**

<figure><img src="/files/qvZUOoGw0JgIDYMmoEAD" alt="" width="563"><figcaption></figcaption></figure>

### Why only 5 rows per place get matched

When Felt geomatches a column of place identifiers to map boundaries, it attaches the boundary to at most **5 rows that share the same identifier**; the 6th row onward stays unmatched. ZIP codes are the most common case, but this applies to any identifier Felt geomatches—states, counties, countries, and the other regions listed under [#available-geomatching-regions](#available-geomatching-regions "mention").

Every matching row gets the **same** boundary shape. If 50 rows have ZIP code `94110`, they'd all receive the exact same `94110` polygon, stacked on top of one another—identical overlapping shapes that bloat the layer, slow the map down, and make styling and clicking unpredictable. The cap keeps that from happening.

{% hint style="info" %}
If many rows share the same identifier, it usually means your data isn't shaped the way you want it yet. Summarize it into one row per place first—a proper choropleth instead of a stack of duplicate polygons.
{% endhint %}

#### Summarize first, then map

1. **Summarize by the place column.** Group rows that share an identifier into one row with a count, sum, or average—in your source spreadsheet, or, on the [Enterprise plan](https://felt.com/pricing), with an [SQL queries](/data-sources/cloud-sources/sql-queries) against a connected source.
2. **Match to boundaries.** With one row per place, you're well under the limit, so every place geomatches.
3. **Style by your summary value.** Use a **Color range** visualization with a graduated color ramp to turn your totals into a choropleth. See [Vector layers](/layers/styling/vector-layers).

## Changing or selecting a geometry type

Occasionally Felt doesn't automatically detect the columns with spatial data, or the detected spatial column needs to be changed. Fortunately, you can select the most appropriate geometry type after uploading the data into Felt.

Changing the geometry type drawn by Felt allows you to customize the way your data is shown on the map. Making these changes allows you to color-code the data the way you need it displayed.

### Steps

1. Select the layer in the Legend
2. Click **Open table** in the toolbar

<figure><img src="/files/rsc2Li4ZH1r7eC9pTwIo" alt="" width="355"><figcaption></figcaption></figure>

3. Click on **Geometry settings** (underneath the ![](/files/T5UtgrJLQvJp1yFPZmYs) icon in the upper right of the [table](/layers/table-view))

<figure><img src="/files/Fsaj7IKv6cSrG5wCgt00" alt="" width="375"><figcaption></figcaption></figure>

4. Select desired geometry type and columns
5. Click **Update spreadsheet**

<figure><img src="/files/nO0SG5XrPqTLyTo1VN1E" alt="" width="563"><figcaption></figcaption></figure>

{% hint style="info" %}
Selecting address columns will result in Geocoding addresses, while country names or ZIP codes will result in Geomatching regions.
{% endhint %}

### Examples

1. Choosing different columns in a spreadsheet to ensure the right location data is used.
2. Change the points on a map to fill up their associated province, state, or zip code region

<figure><img src="/files/akvXdRse4aj1LfrLH0wa" alt="" width="563"><figcaption></figcaption></figure>

3. Symbolize an area or region as a point instead

<figure><img src="/files/nyD546izHSjvSfsR4WGT" alt="" width="563"><figcaption></figcaption></figure>

## Best practices

#### Structure your data

* Use one header row with clear column names.
* Each row should represent a single geographic feature or location. Avoid duplicate entries for the same location across multiple tabs or spreadsheets. Overlapping points won't add value on the map.
* Remove Excel-specific formatting: strip merged cells, complex Excel styling, and calculated fields before uploading. Try pasting only the values of your styled Excel sheet into a new sheet and upload that to Felt.
* Keep header names consistent if you plan to refresh or update the data later—renaming columns used in styling or filters will break those settings

#### Organize data efficiently

* Consolidate related data into one spreadsheet and use a "category" or "type" column to distinguish between similar items
  * You can filter and style by category in Felt after uploading—different colors and shapes can represent different types
* Use columns strategically: columns should track attributes and metrics you want to visualize, filter, or analyze in Felt (type, category, owner, status, revenue, etc.).
  * You can create [components](https://help.felt.com/dashboards-and-apps/components) in Felt to filter and interact with column data.
* Use separate spreadsheets when:
  * Tracking entirely different entities (e.g., separate companies or unrelated datasets)
  * Workflows require independent management or separate access permissions of the data

#### Ensure accurate geocoding

* Longitude and latitude coordinates provide the most reliable results. Coordinates are always stable and won't have geocoding errors.
* Provide complete addresses and include street number, street name, city, state, and ZIP code. Incomplete addresses may fail to geocode. Avoid descriptive text in address fields.
* Check the geocoding report after upload to identify failed locations. Look for the chart icon in the table view (next to the **Found** column)

  <figure><img src="/files/Imkl4mjssrDlV0FcRTBh" alt="" width="194"><figcaption></figcaption></figure>
* Download results to see which addresses need correction. Fix issues in your source spreadsheet and use [Upload new version](https://help.felt.com/layers/refreshing-data#file-uploaded-layers) to update the results

#### Refresh data without breaking your map

* Use [Upload new version](https://help.felt.com/layers/refreshing-data#file-uploaded-layers) to refresh data without needing to restyle

  <figure><img src="/files/hcrjiParq22AJKQIHw4C" alt="" width="163"><figcaption></figcaption></figure>
* When refreshing, maintain column consistency. Do not rename columns that are used in styling, filters, or components. Felt uses column headers to maintain styling when you upload new versions.
* You can add new columns without affecting existing visualizations
* Felt will detect if the column used in styling is no longer available and prompt you to select an updated column for styling consistency

  <figure><img src="/files/7w9x63c7pDQMpVSeWyW0" alt="" width="563"><figcaption></figcaption></figure>

#### Geographic data formats

* Uploads can include geographic data in unprojected decimal degrees latitude and longitude
* Geographic fields should be given easy-to-find names, such as:
  * `geometry`, `wkt`, or `geom_wkt`
  * `x` & `y`
  * `lat` & `lon`, `latitude` & `longitude`, or `lat` & `lng`
* Whole geometries must be in one of these formats:
  * [Well Known Text](https://en.wikipedia.org/wiki/Well-known_text_representation_of_geometry)
    * examples: `POINT(-122 37)`, `LINESTRING (-122 37, -123 38)`
  * Hex-encoded Well Known Binary
    * example:`'01010000000000000000805ec00000000000804240'`
  * GeoJSON Geometry Objects
    * example: `{'type': 'Point', 'coordinates': (-122.0, 37.0)}`
* Felt can find the location of data using a number of different methods including:
  * `Coordinates` and `Addresses` types draw points (see [#geocoding](#geocoding "mention"))
  * Provinces, states, zip codes, countries draw areas/polygons (see [#geomatching](#geomatching "mention"))
    * `Natural Earth v1`, `US Census, 2020`, and `Eurostat, 2021` types support polygons
  * Latitude & Longitude coordinates
  * `WKT` and `WKB` are more advanced types that can be used for drawing points, lines, or areas.

## Troubleshooting

See the [Troubleshooting](/upload-anything/troubleshooting) page for common upload failures and how to fix them.


# Raster and imagery

Add satellite imagery, aerial photos, and other raster data to your Felt maps.

<figure><img src="/files/CXRm9eEFnIH6xzSx6scV" alt="" width="563"><figcaption></figcaption></figure>

Felt can read raster data like aerial and satellite imagery, Digital Elevation Models (DEMs), surface temperature measurements and more in a variety of formats.

## Static files

### Supported file formats

* GeoTIFFs (`.tif`, `.tiff`)
* Raster GeoPackages (`.gpkg`)
* ASCII grids (`.asc`, `.xyz`)
* Common image formats like PNG and JPEG if an auxiliary World File (`.wld`, `.pnw`, `.jpw`, etc) is provided.

### Unknown projections

Most raster formats include relevant information about the Coordinate Reference System the data is in. However, if no such metadata is found, Felt will assume coordinates to be in latitude & longitude (when inside bounds) or Web Mercator meters.

### Processing

For adequate display, Felt will convert the source data to PNGs with values fitted to the 0-255 range. This might mean some colors may appear slightly different from the original data.

Color tables (paletted values) and No Data values will be respected if present.

## Tile URLs

Felt can also read raster data from tiled URL sources in formats like WMTS and XYZ (slippy maps). Click **Upload Anything** ![](/files/LykIpn1aK77DZiwFt60G) in the toolbar and choose the option **Add from URL...**

{% embed url="<https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmRfGitkyjOEMvVsEyGWN%2Fuploads%2FieE9cYQe700U0dEvP7O3%2Fupload_raster_url.mp4?alt=media&token=39737e47-327b-4934-8ddf-ccdd38a6a655>" %}

These sources must be added as *template URLs*, which means the URL must contain the following parts: `{z}` (zoom), `{x}` (row) and `{y}` (column). Instead of the `{y}` parameter, `{-y}` may also be used to indicate that tiles are served in [TMS](https://wiki.osgeo.org/wiki/Tile_Map_Service_Specification) format. They must also end in `.png`, `.jpg` or `.jpeg`.

Here’s an example raster URL of the city of Aberdeen from the National Library of Scotland:

```jsx
https://geo.nls.uk/maps/towns/aberdeen/{z}/{x}/{-y}.png
```

<details>

<summary>Example: David Rumsey Maps</summary>

Working with the David Rumsey map collection in Felt is easy via our XYZ (slippy maps) tile URL service. Here’s how to get these maps into Felt.

1. Use [this map](https://www.davidrumsey.com/view/georeferenced-maps) to find maps from the collection that are georeferenced. Alternatively, skip down a few steps if you are already on a map’s metadata page. Once you have found a map, click on its pin, and then its image from the popup:
2. The map will open in another viewer, click on the option **“What’s next?”** in the bottom right hand corner of the map:
3. This will take you to the map’s metadata page. From here, copy the **XYZ link** in the **Use in GIS apps** portion of the page
   * for example, the Denver map link is [`https://maps.georeferencer.com/georeferences/cbbf9f5f-a294-59c9-a2de-88855513599e/2017-03-29T03:45:12.290249Z/map/{z}/{x}/{y}.png?key=SsmpU2nwmUdxCLg5XZaZ`](https://maps.georeferencer.com/georeferences/cbbf9f5f-a294-59c9-a2de-88855513599e/2017-03-29T03:45:12.290249Z/map/%7Bz%7D/%7Bx%7D/%7By%7D.png?key=SsmpU2nwmUdxCLg5XZaZ)
   * once you have copied the link, use **Cmd+V** to paste it directly on a Felt map. You will notice the toast **Adding raster layer** in the top portion of the map:
   * once the raster layer is loaded, you’ll see it as a Layer in your map and you can use the option **Zoom to fit** to zoom to its extent:

</details>

## Styling raster layers

You can control the opacity, legend and position of a raster layer relative to the basemap in the style editor. Learn more about [styling raster data](/layers/styling/raster-layers).


# Connecting ESRI services

{% embed url="<https://www.youtube.com/watch?v=po5VBdpQs2c&t=1s>" %}

Felt supports direct connections to ESRI REST services, including those hosted on ArcGIS Online, ArcGIS Enterprise, or any public-facing ESRI server. You can connect your data directly to Felt and immediately start collaborating with your team. This integration eliminates the need to export or duplicate your ESRI datasets, keeping your workflows efficient while making your geospatial data accessible to everyone who needs it.

## Supported services

### Map Service

Map services can include either vector layers that support querying, static map images or raster tiles. If a layer has **Query** capabilities, Felt treats it as any other vector source—enabling styling, attribute inspection, analysis and more. If it does not, the layer is rendered as a static raster image.

You can add either an individual layer (`/MapServer/2`) or the full service (`/MapServer`) containing multiple layers.

Example Map Service URL:

```
https://basemap.nationalmap.gov/arcgis/rest/services/USGSTopo/MapServer
```

### Feature Service

Feature services include vector geometries and attributes, commonly used for querying and editing in ESRI environments. In Felt, these layers are read-only but fully interactive—you can filter features, run spatial analysis, style them, and explore attribute data just like any other vector layer.

You can connect to an entire service (`/FeatureServer`) or a single layer within it (`/FeatureServer/0`).

Example Feature Service URL:

```
https://services.arcgis.com/ZOyb2t4B0UYuYNYH/arcgis/rest/services/2021_Traffic_Flow_Counts/FeatureServer/2
```

### Image Service

Image services provide raster data such as aerial imagery and elevation models. These are displayed in Felt as non-styleable raster images.

Supported URLs follow the `/ImageServer` format. Felt automatically handles both pre-tiled and dynamically rendered image services.

Example Image Service URL :

```
https://sampleserver6.arcgisonline.com/arcgis/rest/services/CharlotteLAS/ImageServer
```

## Adding services

ESRI services can be added to Felt in a few different ways:

* **Paste a public service URL directly onto the map** — Felt will automatically detect and load the layers.
* **Use the Upload from URL option** to configure and load in the service. With this option you can choose to enable Streaming, which improves performance for large or complex datasets by loading only the features visible in the current map view. [Learn more](/upload-anything/urls#esri-mapserver-featureserver-and-imageserver)
* **Connect via the ESRI Feature Server connector** — best for authenticated services or when you want to set up reusable, shared access to data across your workspace. [Learn more](/data-sources/cloud-sources/esri-feature-service)

## Streaming services

If you are connecting to large Feature or Map services, enable Streaming for optimal performance. When enabled, Felt loads only the data visible within the current map view which significantly improves performance for large, complex, or global-scale services. Learn more about adding [ESRI services from a URL](/upload-anything/urls#esri-mapserver-featureserver-and-imageserver) and [styling streaming layers](/upload-anything/urls#adding-vector-tile-layers).

{% hint style="success" %}
This feature is only available to customers on the [Enterprise plan](https://felt.com/pricing). To upgrade, [contact sales](https://felt.com/sales).
{% endhint %}


# QGIS plugin

Connect Felt with QGIS using our plugin for seamless data transfer between platforms.

{% embed url="<https://youtu.be/-mUdqQ4FX6E?si=S_zCxEb64oP1QORj>" %}

The Add to Felt plugin bridges the analytical capabilities of QGIS with Felt's collaboration features, allowing you to share your QGIS projects with colleagues and clients. Simply install the plugin through QGIS's plugin manager, then use it to send your visible layers to Felt where you can control access permissions and invite others to view, comment on, or edit your maps. Felt ❤️ [QGIS](https://qgis.org/en/site/) and we are proud to be a [Flagship Sustaining Member](https://blog.qgis.org/2023/03/21/felt-is-our-first-sustaining-member/).

### Installing the plugin

The **Add To Felt** QGIS plugin can be installed directly from the QGIS Plugins repository by clicking on the **Plugins > Manage and install plugins...** option in the toolbar.

<figure><img src="/files/7J6vHv6u11v7pYf56f1r" alt="" width="563"><figcaption></figcaption></figure>

### Logging in to your Felt account

Now that you’ve installed the plugin, you can find it in the **Web** menu of the main toolbar.

<figure><img src="/files/KbHtpDhB4R8IIVXXo56F" alt="" width="280"><figcaption></figcaption></figure>

The next step is to log in to your Felt account, which you can do by selecting the **Sign In...** option. You’ll also be able to create an account if you don’t already have one.

<figure><img src="/files/pBqWSylzEJGl7ugeTt76" alt="" width="563"><figcaption></figcaption></figure>

Both of these options will take you to the Felt website on your browser, where you’ll be prompted to authorize QGIS to perform actions on your behalf. Click **Authorize** and you’re all set!

<figure><img src="/files/ALLqu3Nc3TJyjPsf4Gpv" alt="" width="375"><figcaption></figcaption></figure>

### Creating a Felt map from QGIS

You can access the plugin from:

* The **Web > Felt** menu in the top application toolbar
* The Felt icon in the Web toolbar. If the icon does not appear on your main QGIS toolbar, right click on it, then check the **Web Toolbar** box.

Once the upload process has finished, click on the **Open Map** button to navigate to the Felt map where your layers are being uploaded.

### Supported layers

The **Add to Felt** QGIS plugin supports uploading both vector and raster layers to Felt. You can find a full list of supported formats in the [Upload Anything](/upload-anything/files) section.

## Frequently asked questions

<details>

<summary>What is the Add to Felt QGIS plugin?</summary>

The [Add to Felt plugin](https://plugins.qgis.org/plugins/felt/) connects QGIS with Felt, enabling seamless data transfer between the two platforms. It bridges QGIS's analytical capabilities with Felt's collaboration features, allowing you to share your QGIS projects with colleagues and clients directly from QGIS.

</details>

<details>

<summary>Who can use this plugin?</summary>

The Add to Felt QGIS plugin is available on Professional and Enterprise plans. You'll need to sign up for a paid plan to use this feature.

</details>

<details>

<summary>How do I install the Add to Felt plugin?</summary>

You can install the plugin directly from the QGIS Plugins repository:

1. Open QGIS
2. Click on **Plugins > Manage and install plugins...** in the toolbar
3. Search for "Add to Felt"
4. Click Install

</details>

<details>

<summary>How do I log in to my Felt account from QGIS?</summary>

After installing the plugin, you can log in by:

1. Opening the **Web** menu in the main toolbar
2. Selecting **Sign In...**
3. You'll be directed to the Felt website in your browser
4. Click **Authorize** when prompted to allow QGIS to perform actions on your behalf

</details>

<details>

<summary>Can I create a Felt account from within QGIS?</summary>

Yes! If you don't already have a Felt account, you'll have the option to create one during the login process.

</details>

<details>

<summary>How do I access the plugin after installation?</summary>

You can access the Add to Felt plugin in two ways:

1. By clicking the Felt icon in the Web toolbar (if the icon doesn't appear, right-click on the main toolbar and check the **Web Toolbar** box)
2. Right-click on a layer > Export > Share layer to Felt...

</details>

<details>

<summary>How do I send my QGIS layers to Felt?</summary>

Your visible / selected layers will be uploaded to the Felt map when you open the plugin. You can also upload specific layers using the plugin by right clicking on a layer, hovering over Export, and selecting **Share layer to Felt...**

</details>

<details>

<summary>How do I view my map after uploading?</summary>

Once the upload process finishes, click the **Open Map** button to navigate directly to your Felt map where your layers are being uploaded.

</details>

<details>

<summary>What types of layers can I upload to Felt from QGIS?</summary>

The Add to Felt plugin supports both vector and raster layers. For a comprehensive list of supported formats, refer to [Upload Anything](/upload-anything/files).

</details>

<details>

<summary>Will my layer styling transfer to Felt?</summary>

The plugin transfers your visible layers from QGIS to Felt, though specific styling behavior may depend on the layer type and format.

</details>

<details>

<summary>What can I do with my map once it's in Felt?</summary>

After uploading your QGIS project to Felt, you can:

* Control access permissions
* Invite colleagues and clients to view your maps
* Enable others to comment on your maps
* Allow others to edit your maps
* Collaborate in real-time with your team

</details>


# Troubleshooting

Solve common data upload issues in Felt with these troubleshooting tips and solutions.

## ESRI Shapefiles

Shapefiles are a [multi-file format](https://en.wikipedia.org/wiki/Shapefile#Overview), with each file containing some specific data. Three file parts are mandatory (`.shp`, `.shx` and `.dbf`) and, without any of them, your upload will not be successful.

A fourth component (`.prj`) is very common, and used to determine what [Spatial Reference System](https://en.wikipedia.org/wiki/Spatial_reference_system) should be used to interpret the coordinates in your data. If this file is not present, Felt will assume the coordinates are in latitude/longitude (represented by the EPSG code `4326`).

## Spreadsheets

See the [Spreadsheets](/upload-anything/spreadsheets) page for general information on tabular file formats like CSV or Excel.

### Point coordinates

* Coordinates must be in latitude and longitude. Projected coordinate systems, such as UTM, are not supported.
* Coordinates can be in decimal degrees, such as `40.7128`, or in degree notation, such as `40° 43' 50.1960'' N`.
* Coordinates can be in two separate fields, or combined in a single field such as `40.7128, -74.006`.

### Geocoding

* By default, Felt will geocode address data for up to 10,000 addresses per upload. If you need a higher limit, [contact sales](https://felt.com/sales) to upgrade to our [Enterprise plan](https://felt.com/pricing).
* Context is important. Make sure either your `address` field contains all the necessary information (city, state, country, etc) *or* you have several fields with that information.
* See the [Spreadsheets](/upload-anything/spreadsheets) page for general information on how geocoding works.

### Geomatching

See the [Spreadsheets](/upload-anything/spreadsheets) page for general information on how Geomatching works.

#### Matching threshold

Geomatching checks columns in your data for values that match codes or names in our available regions. If a column does not contain a majority of values that match, it will be discarded.

#### Duplicate & unique values

Geomatching works best with columns that have unique values. Otherwise, you might end up with the same polygon for California many times, superimposed.

To avoid that, the Geomatching process makes sure the amount of duplicate values (all values that are repeated at least two times) is under a certain threshold.

#### US FIPS codes

Make sure your US FIPS codes (states, counties, CBSAs and census tracts) aren’t missing leading zeroes. FIPS codes always have a fixed number of digits per boundary type: 2 for states, 5 for counties, 11 for census tracts, etc.

#### US ZIP codes

Similarly, ZIP codes should always have 5 digits, so watch out for missing leading zeroes. Also, Felt doesn’t currently understand ZIP+4 codes, so remove the extra suffix if present.

## AutoCAD drawings

#### My drawing is in the wrong place

CAD drawings (`.dwg`, `.dxf`) only land at their true location when the drawing has a standard, earth-based coordinate system assigned in AutoCAD, or when its geometry is already in geographic coordinates. See the [AutoCAD section](/upload-anything/files#autocad) of the Files page for the full requirements.

#### My drawing is missing objects

Entities that depend on proprietary object types from AutoCAD vertical products (such as Civil 3D surfaces, corridors, or alignments) may be skipped when Felt processes a drawing. Explode those objects into plain AutoCAD geometry before saving the drawing.

## Unsupported file formats

#### QGIS metadata files (`.qmd`, `.qgz`, `.qgs`, `.qml`)

These files don't actually contain any data, just the metadata that defines a QGIS project (such as the style for layers in the project, references to the actual files, etc). Try uploading the original data files (Shapefiles, GeoPackages, GeoJSON, etc) instead.

#### ArcGIS layer files (`.lyr` and `.lyrx`)

Similarly, the ArcGIS Layer File format does not contain any actual data, but a *reference* to another file that stores the actual data (usually a Shapefile or Geodatabase). Try uploading the original data files to Felt instead.

#### Enhanced Compressed Wavelets (`.ecw`)

ECW is a proprietary format developed by Hexagon Geospatial. Try exporting your data as GeoTIFF (`.tif`) instead.

## URL uploads

#### Maximum layers per upload

Felt will automatically try to parse and upload all layers from an ESRI or OGC service. However, Felt has a maximum of 50 layers per upload (see [Limits](/upload-anything/limits)). If the service hosts more than that amount, an error will be returned.

For OGC services, users can work around this by specifying which layers to request in the URL query parameters:

* *WMTS* and *WFS*: a single layer in the form of `?layer=X`
* *WMS*: one or more layers in the form of `?layers=X,Y`


# Limits

Felt is built for geospatial data at scale — up to 50 million features per layer and 500 layers per map.

Felt is built to handle real-world geospatial data at scale. A single layer can hold up to **50 million features**, and a single map can hold up to **500 layers** — so you can bring your full dataset to the map, not a sample of it.

## Capacity guidelines

| Limit                       | Maximum    |
| --------------------------- | ---------- |
| Features per layer          | 50 million |
| Layers per map              | 500        |
| Tables per connected source | 5,000      |

### Edit at scale, instantly

Felt's [Lightning tiling engine](https://felt.com/blog/lightning-tiles) lets you bring in millions of features and edit them the moment they land — changes render immediately, your whole team can edit at once, and statistics are calculated live across millions of features. Learn more about [editing layers](/layers/editing-layers).

## Browser upload limits

These limits apply to **direct browser uploads** — data you drag and drop or add through Upload Anything. They aren't hard ceilings on what Felt can handle; see [Bringing in larger data](#bringing-in-larger-data) below.

| Limit                    | Maximum | More info                                                      |
| ------------------------ | ------- | -------------------------------------------------------------- |
| File upload size         | 5GB     | [Files](/upload-anything/files)                                |
| Image & PDF overlay size | 20MB    | [Files](/upload-anything/files)                                |
| Layers per upload        | 50      | [Files](/upload-anything/files), [URLs](/upload-anything/urls) |

Supported files can be uploaded in their original format or compressed as `.zip`, `.gz`, or `.tar`.

## Bringing in larger data

When your data is larger than a browser upload allows — or you want it to stay live — bring it in another way:

* **Cloud sources** — connect databases and warehouses like Snowflake, BigQuery, and Postgres / PostGIS, and storage like Amazon S3, Azure Blob Storage, and Google Cloud Storage directly, with no file-size cap. See [Cloud sources](/data-sources/cloud-sources).
* **URL and streaming sources** — stream large, global, or frequently updating datasets as [external vector tiles](/upload-anything/urls), or stream large ESRI Feature and Map services so Felt loads only the data in view. See [URLs](/upload-anything/urls).
* **Very large rasters** — stream terabyte-scale COGs and STAC catalogs in place. See [Raster infrastructure](/data-sources/raster-infrastructure).
* **API** — bring in and manage large datasets programmatically with [Felt's API](https://developers.felt.com).

So a 5GB file or 50 layers in one upload is just the starting point.

## Raster at scale

Felt serves very large rasters elegantly. Instead of uploading and duplicating files, Felt streams [Cloud Optimized GeoTIFFs (COGs)](/data-sources/raster-infrastructure/cloud-optimized-geotiffs) and [STAC catalogs](/data-sources/raster-infrastructure/stac) directly from cloud storage such as Amazon S3, Azure Blob Storage, and Google Cloud Storage — indexed for location and metadata filtering and ready for immediate visualization. You can work with terabyte-scale raster datasets without ever hitting a file-upload limit.

Learn more in [Raster infrastructure](/data-sources/raster-infrastructure) and [Raster streaming best practices](/data-sources/raster-infrastructure/raster-streaming-best-practices).

## Frequently asked questions

<details>

<summary>How many features can a single layer hold?</summary>

A single layer can hold up to 50 million features, and you can edit them instantly thanks to Felt's Lightning tiling engine.

</details>

<details>

<summary>What if I have more than 5,000 tables in a connected source?</summary>

Felt supports up to 5,000 tables in a connected source. If you have more than that, limit which tables you expose to the Felt credentials — connect Felt with a database user whose access is scoped to only the tables you want available. See [Cloud sources](/data-sources/cloud-sources).

</details>

<details>

<summary>What's the largest file I can upload?</summary>

Through your browser, Felt supports files up to 5GB, in their original format or compressed as `.zip`, `.gz`, or `.tar`. Image and PDF overlays can be up to 20MB. See [Files](/upload-anything/files) for details. For larger or live data, connect a [Cloud sources](/data-sources/cloud-sources) or stream it [URLs](/upload-anything/urls).

</details>

<details>

<summary>What if I need to go beyond these limits?</summary>

The browser-upload limits aren't caps on what Felt can handle. Connect a [Cloud sources](/data-sources/cloud-sources), stream from a [URLs](/upload-anything/urls) or via [Raster infrastructure](/data-sources/raster-infrastructure), or use [Felt's API](https://developers.felt.com). If you still need more, [get in touch](https://felt.com/contact).

</details>


# Basemaps

Select and customize basemap options to complement your spatial data layers.

Choose from Felt's basemap options to create the perfect foundation for your data. Select from default or satellite styles, or switch between light and dark themes to provide contrast with your map layers. Turn labels on or off for a cleaner look, and use the sandwiching feature to control whether your data appears above or below basemap elements like roads and water.

For custom needs, connect external map services by adding basemaps from URL sources that support XYZ map tile format, including OpenStreetMap, MapTiler, Mapbox Studio, and ArcGIS. You can also choose a solid color basemap to make your data the focus of attention.

## Felt basemaps

Felt provides 4 basemap options for every map:

{% columns %}
{% column %}

<p align="center"><strong>Standard</strong></p>

<figure><img src="/files/mXNjB6v5qZglWKWbMm1U" alt=""><figcaption></figcaption></figure>
{% endcolumn %}

{% column %}

<p align="center"><strong>Satellite</strong></p>

<figure><img src="/files/IVf9ODZj4G6ygbTCuw4M" alt=""><figcaption></figcaption></figure>
{% endcolumn %}
{% endcolumns %}

{% columns %}
{% column %}

<p align="center"><strong>Light mode</strong></p>

<figure><img src="/files/eSOdTTUTYGJjTQUdU4yl" alt=""><figcaption></figcaption></figure>
{% endcolumn %}

{% column %}

<p align="center"><strong>Dark mode</strong></p>

<figure><img src="/files/lAyQH4Erl2GQAXYwbJ4V" alt=""><figcaption></figcaption></figure>
{% endcolumn %}
{% endcolumns %}

{% hint style="info" %}
Felt's satellite basemap is sourced from Stadia Maps. Learn more about update cadence and resolution [here](https://stadiamaps.com/products/maps/map-styles/satellite-imagery/).
{% endhint %}

Click the **Basemap** button in the top right section of the toolbar to choose from the options, control label visibility, and configure custom basemaps.

<figure><img src="/files/672HFTYYvwnvuCRcQ2qW" alt="" width="217"><figcaption></figcaption></figure>

{% hint style="info" %}
Map label control is only available for Felt-provided basemaps.

Felt automatically detects the language settings from your device and applies that language to map labels on Felt provided basemaps.

The label and halo colors for layer and annotation labels are automatically reversed when they are set to Auto and the basemap is configured to Satellite, Dark mode, or any dark custom basemap.
{% endhint %}

For more Felt options, hover over **Add basemap** to add a custom basemap or configure a solid color for your map's basemap. See [#add-a-custom-basemap](#add-a-custom-basemap "mention") and [#popular-custom-basemaps](#popular-custom-basemaps "mention") for more information on custom basemaps.

#### Polygon layer & basemap ordering

After selecting your basemap, you can adjust layer positioning for polygon layers using the **Position** option in the style editor. This option controls whether your data appears above or below basemap road and water features. The default for polygon layers is **Above water and roads**.

{% embed url="<https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmRfGitkyjOEMvVsEyGWN%2Fuploads%2F0CZ9R6wZjj1H8wO58omU%2FScreen%20Recording%202025-03-03%20at%208.17.00%E2%80%AFAM.mp4?alt=media&token=14f83f5b-aa57-4999-a550-a8ee01ac611e>" %}

### Best practices

Here are some general recommendations when choosing a basemap in Felt:

1. **Working with more than 7 colors on your map? Try light or dark basemaps**

<figure><img src="/files/6VIG3HFcNAueSyiSFhs6" alt="" width="563"><figcaption></figcaption></figure>

<figure><img src="/files/DRCN2hz5gEIWnSDnYKbC" alt="" width="563"><figcaption></figcaption></figure>

2. **Satellite works well if you need more details from the basemap or more real-world context.**

<figure><img src="/files/fCUtw3n5AJCaeBIEKjl5" alt="" width="563"><figcaption></figcaption></figure>

<figure><img src="/files/mpfftirlsCdIfqDM3zD9" alt="" width="563"><figcaption></figcaption></figure>

3. **Select a solid color to construct your map from a blank canvas and bring your data to the foreground**

<figure><img src="/files/oqE9gqpphVFkmY2IXqYR" alt="" width="563"><figcaption></figcaption></figure>

<figure><img src="/files/wFBqU4hkw9KKoHyb0eYI" alt="" width="563"><figcaption></figcaption></figure>

## Custom basemaps

You can use your own XYZ ([“Slippy map”](https://en.wikipedia.org/wiki/Tiled_web_map)) tiles as a Felt basemap by specifying a URL. You can also set advanced options like the minimum and maximum zoom levels (see [Map settings](/dashboards-and-apps/map-settings#map-constraints)), so Felt knows when to stop requesting tiles and start to overzoom.

XYZ tile URLs provide a template that Felt can use to request tiles and must contain parameters for specifying the zoom level (`{z}`), tile row (`{x}`) and tile column `{y}`. Felt also supports tiles served in [TMS](https://en.wikipedia.org/wiki/Tile_Map_Service) format by specifying a negative tile column parameter `{-y}`.

{% hint style="warning" %}
Note: sharing your map with many viewers may incur in high costs or running out of credits with your tile provider or server.
{% endhint %}

Any API keys you include in the tile URL will be visible to all users. [In some services](https://blog.mapbox.com/url-restrictions-for-access-tokens-5f7f7eb90092), you can prevent other users from using your API keys or access tokens by limiting them to specific domains or URLs.

#### Add a custom basemap

{% hint style="warning" %}
Tile URLs must include space for {z}=zoom, {x}=column, and {y}=row values
{% endhint %}

1. Click the **Basemap** button in the top right section of the toolbar
2. Hover **Add basemap** option
3. Select **Add from URL...** to connect custom XYZ map tiles

<figure><img src="/files/KZV4MC43rYqNwvKOTCY2" alt="" width="375"><figcaption></figcaption></figure>

4. Paste your XYZ tile URL into the **Tile URL** field in the dialog. See [#popular-custom-basemaps](#popular-custom-basemaps "mention") for examples to add from services like OpenStreetMap, MapTiler, Mapbox Studio, or ArcGIS

<figure><img src="/files/Wq103TE2JIMw0is5vcUP" alt="" width="375"><figcaption></figcaption></figure>

4. Provide a title for your custom basemap
5. Under Additional Settings, you can:
   1. Customize the attribution text
   2. Adjust UI element colors for legibility

<figure><img src="/files/mH0ai4qJCsbrzdbbd70I" alt="" width="375"><figcaption></figcaption></figure>

7. Click **Add Basemap** to apply your custom basemap to the map

### Popular custom basemaps

Certain data providers provide a publicly accessible Tile Server URL for basemaps which can be used in Felt. These URLs can be added as layers (with [Upload Anything's XYZ raster tile support](/upload-anything/urls#xyz-raster-tiles)) or as custom basemaps in Felt. To add, copy and paste the URLs listed below.

<table><thead><tr><th width="145.65625" align="center" valign="middle">Name</th><th width="168.50390625" align="center" valign="middle">Preview</th><th width="301.94140625" align="center" valign="middle">URL</th><th valign="middle">Source info</th></tr></thead><tbody><tr><td align="center" valign="middle">OpenStreetMap</td><td align="center" valign="middle"><img src="/files/wRMHRAdp1iMi8GMqZCAd" alt="" data-size="original"></td><td align="center" valign="middle"><code>https://tile.openstreetmap.org/{z}/{x}/{y}.png</code></td><td valign="middle"><a href="https://operations.osmfoundation.org/policies/tiles/">Information</a></td></tr><tr><td align="center" valign="middle"><p>Google Satellite</p><p>(no labels)</p></td><td align="center" valign="middle"><img src="/files/FYkuJ85XJNk86IsALM29" alt="" data-size="original"></td><td align="center" valign="middle"><code>https://mt1.google.com/vt/lyrs=s&#x26;x={x}&#x26;y={y}&#x26;z={z}</code></td><td valign="middle"><a href="https://cloud.google.com/maps-platform/terms">Information</a></td></tr><tr><td align="center" valign="middle"><p>Google Hybrid Satellite</p><p>(with labels)</p></td><td align="center" valign="middle"><img src="/files/H2aWBQE3wGNNLvtVAdPq" alt="" data-size="original"></td><td align="center" valign="middle"><code>https://mt1.google.com/vt/lyrs=y&#x26;x={x}&#x26;y={y}&#x26;z={z}</code></td><td valign="middle"><a href="https://cloud.google.com/maps-platform/terms">Information</a></td></tr><tr><td align="center" valign="middle">Google Roads</td><td align="center" valign="middle"><img src="/files/YPbfIugRyeJfVwN1kbsW" alt="" data-size="original"></td><td align="center" valign="middle"><code>https://mt1.google.com/vt/lyrs=h&#x26;x={x}&#x26;y={y}&#x26;z={z}</code></td><td valign="middle"><a href="https://cloud.google.com/maps-platform/terms">Information</a></td></tr><tr><td align="center" valign="middle">ESRI World Imagery</td><td align="center" valign="middle"><img src="/files/B47YBMX0niozyiXJ3cWy" alt="" data-size="original"></td><td align="center" valign="middle"><code>https://services.arcgisonline.com/arcgis/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}</code></td><td valign="middle"><a href="https://doc.arcgis.com/en/data-appliance/latest/maps/world-imagery.htm#ESRI_SECTION1_E1816043E992443E92DA617D50C697C9">Information</a></td></tr><tr><td align="center" valign="middle">ESRI Hillshade</td><td align="center" valign="middle"><img src="/files/Ro441Gl07DoHPlg9ELHM" alt="" data-size="original"></td><td align="center" valign="middle"><code>https://services.arcgisonline.com/arcgis/rest/services/Elevation/World_Hillshade/MapServer/tile/{z}/{y}/{x}</code></td><td valign="middle"><a href="https://doc.arcgis.com/en/data-appliance/latest/maps/world-hillshade.htm">Information</a></td></tr><tr><td align="center" valign="middle">ESRI Dark Hillshade</td><td align="center" valign="middle"><img src="/files/8LawNvBHCrjBUOosIQhu" alt="" data-size="original"></td><td align="center" valign="middle"><code>https://services.arcgisonline.com/arcgis/rest/services/Elevation/World_Hillshade_Dark/MapServer/tile/{z}/{y}/{x}</code></td><td valign="middle"><a href="https://doc.arcgis.com/en/data-appliance/latest/maps/world-hillshade-dark.htm">Information</a></td></tr><tr><td align="center" valign="middle">Stamen Watercolor</td><td align="center" valign="middle"><img src="/files/PQAjCqBICp63cpxk7IEb" alt="" data-size="original"></td><td align="center" valign="middle"><code>https://watercolormaps.collection.cooperhewitt.org/tile/watercolor/{z}/{x}/{y}.jpg</code></td><td valign="middle"><a href="https://watercolormaps.collection.cooperhewitt.org/#12/40.7847/-73.9574">Information</a></td></tr><tr><td align="center" valign="middle">USDA NAIP (USA only)</td><td align="center" valign="middle"><img src="/files/Lhg7JchRIrqhpxLAgslp" alt="" data-size="original"></td><td align="center" valign="middle"><code>https://gis.apfo.usda.gov/arcgis/rest/services/NAIP/USDA_CONUS_PRIME/ImageServer/tile/{z}/{y}/{x}</code></td><td valign="middle"><a href="https://hub.arcgis.com/datasets/e74cf6b0790e424489bbe84cbc0dc7ad/about">Information</a></td></tr><tr><td align="center" valign="middle">USGS Topo (USA only)</td><td align="center" valign="middle"><img src="/files/HvVSvvUji1Hv2zufI9SR" alt="" data-size="original"></td><td align="center" valign="middle"><code>https://basemap.nationalmap.gov/arcgis/rest/services/USGSTopo/MapServer/tile/{z}/{y}/{x}</code></td><td valign="middle"><a href="https://basemap.nationalmap.gov/arcgis/rest/services/USGSTopo/MapServer">Information</a></td></tr><tr><td align="center" valign="middle">USGS Imagery (USA only)</td><td align="center" valign="middle"><img src="/files/R4xIwKXggAzPFU3B8aYl" alt="" data-size="original"></td><td align="center" valign="middle"><code>https://basemap.nationalmap.gov/arcgis/rest/services/USGSImageryOnly/MapServer/tile/{z}/{y}/{x}</code></td><td valign="middle"><a href="https://basemap.nationalmap.gov/arcgis/rest/services/USGSImageryOnly/MapServer">Information</a></td></tr></tbody></table>

### Finding custom basemaps

Felt supports custom map basemaps via any web-based map service supporting [the popular XYZ map tile format](https://developers.planet.com/docs/planetschool/xyz-tiles-and-slippy-maps/). Compatible map tiles can be created via Mapbox Studio, found on ArcGIS servers, purchased from Planet, or found freely online via providers like Stamen.

#### **ArcGIS**

ESRI has a variety of supported global basemaps, which can be found [here](https://doc.arcgis.com/en/data-appliance/latest/maps/directory-maps-data.htm#GUID-BC631CFA-8FCF-4AAE-9365-789308697960).

Cached image services can be hosted via [ArcGIS Online](https://www.arcgis.com/index.html) or on your own organization’s server. Access individual basemap image tiles via the [Image Tile REST API](https://developers.arcgis.com/rest/services-reference/enterprise/image-tile.htm):

`https://{imageservice-url}/tile/**{z}/{y}/{x}**`

Note that the order of `{x}` and `{y}` are switched in ArcGIS compared to other services here.

{% embed url="<https://developers.arcgis.com/rest/services-reference/enterprise/image-tile/>" %}

**Sample tile URL templates**

Use these directly in Felt:

|                       |                                                                                                                 |
| --------------------- | --------------------------------------------------------------------------------------------------------------- |
| World imagery service | `https://services.arcgisonline.com/arcgis/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}`               |
| Dark gray basemap     | `https://services.arcgisonline.com/arcgis/rest/services/Canvas/World_Dark_Gray_Base/MapServer/tile/{z}/{y}/{x}` |

#### MapTiler

Tiles hosted by MapTiler can be used in Felt via [Raster Tiles for Leaflet JS](https://docs.maptiler.com/leaflet/raster-tiles-in-leaflet-js/)

|                                                                   |
| ----------------------------------------------------------------- |
| `https://api.maptiler.com/maps/{layer}/{z}/{x}/{y}.png?key={key}` |

{% embed url="<https://docs.maptiler.com/leaflet/examples/raster-tiles-in-leaflet-js/>" %}

#### Mapbox

Custom styles built in Mapbox can be used in Felt via the [Mapbox Static Tiles API](https://docs.mapbox.com/api/maps/static-tiles/)

You can find the username and ID for your style by looking at the “Style URL” after clicking “Share” in [Mapbox Studio](https://studio.mapbox.com). Mapbox API access tokens are available on your account page,<https://account.mapbox.com>.

<figure><img src="/files/VYKXMqiV6vX3smmVqLmO" alt=""><figcaption></figcaption></figure>

* Tile size should be set to **256**
* Replace z, x, y values with variables: **{z}/{x}/{y}**
* Add your access token to the end of the URL

Sample URL:

`https://api.mapbox.com/styles/v1/..../tiles/256/{z}/{x}/{y}@2x?access_token=[ADD_TOKEN_HERE]`

The Static Tiles API converts your style into raster tiles by rendering every requested tile on the server. This limits some styling capabilities and also incurs extra cost. Please refer to the [pricing section](https://docs.mapbox.com/api/maps/static-tiles/#static-tiles-api-pricing) for details.

{% embed url="<https://docs.mapbox.com/api/maps/static-tiles/>" %}

**Sample tile URL template**

Use this in Felt with your Mapbox token:

|                                                                                                                                     |
| ----------------------------------------------------------------------------------------------------------------------------------- |
| `https://api.mapbox.com/styles/v1/feltmaps/clb2k8qp0002i14p8bge81ejh/tiles/256/**{z}/{x}/{y}**@2x?access_token={YOUR_MAPBOX_TOKEN}` |

{% hint style="warning" %}
Users with whom you share a Felt map with a custom Mapbox basemap will be able to view the API token.
{% endhint %}

#### Planet

Daily satellite scenes from Planet can be accessed via [Tile Services](https://developers.planet.com/docs/basemaps/tile-services/):

`https://tiles1.planet.com/data/v1/{type}/{id}/**{z}/{x}/{y}**.png`

For non-commercial uses, Planet hosts imagery of earth’s tropical regions for [Norway's International Climate and Forests Initiative (NICFI)](https://www.planet.com/nicfi/).

{% embed url="<https://developers.planet.com/docs/basemaps/tile-services/>" %}

**Sample tile URL template**

Use this in Felt with your Planet API token:

|                                                                                                                                                                                                                                                                                                                        |
| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [`https://tiles3.planet.com/basemaps/v1/planet-tiles/planet_medres_normalized_analytic_2022-10_mosaic/gmap/{z}/{x}/{y}.png?api_key=YOUR_PLANET_TOKEN`](https://tiles3.planet.com/basemaps/v1/planet-tiles/planet_medres_normalized_analytic_2022-10_mosaic/gmap/%7Bz%7D/%7Bx%7D/%7By%7D.png?api_key=YOUR_PLANET_TOKEN) |

{% hint style="warning" %}
Users with whom you share a Felt map with a custom Planet basemap will be able to view the API token.
{% endhint %}

#### Stamen

Stamen Design published a selection of map layers useful for visualizing data or beautifying a map. Starting in November 2023, you need to create a Stadia Maps account to use Stamen Maps. [See here](https://stadiamaps.com/stamen/) to get started

For docs on this migration, [see here](https://docs.stadiamaps.com/guides/migrating-from-stamen-map-tiles/). Read the full announcement [here](https://maps.stamen.com/stadia-partnership/).

If you want to use the watercolor map by Stamen as a layer or basemap, use this URL to upload:

|                                                                                      |
| ------------------------------------------------------------------------------------ |
| `https://watercolormaps.collection.cooperhewitt.org/tile/watercolor/{z}/{x}/{y}.jpg` |

#### Other Sources

* The Roblabs collection of xyz raster tiles for use in maps built for mobile devices, QGIS and Mapbox Styles: <https://github.com/roblabs/xyz-raster-sources>
* Trail Notes collection tile services: <https://www.trailnotes.org/FetchMap/TileServeSource.html> 💡 Change the uppercase “Z”, “Y”, and “X” to lowercase for these to work in Felt
* Geocaching Map Enhancements map sources:<https://geo.inge.org.uk/gme_maps.ht>[m](http://geo.inge.org.uk/gme_maps.htm)

## Frequently asked questions

<details>

<summary>How do I access basemap options?</summary>

Click the Basemap button (square map icon) in the top right section of the toolbar to choose from available options, control label visibility, and configure custom basemaps.

</details>

<details>

<summary>Where does Felt's satellite imagery come from?</summary>

Felt's satellite basemap is sourced from Stadia Maps. You can learn more about update cadence and resolution in [their documentation](https://stadiamaps.com/products/maps/map-styles/satellite-imagery/).

</details>

<details>

<summary>Can I control map labels on basemaps?</summary>

Yes, map label control is available for Felt-provided basemaps. You can toggle label visibility on or off for a cleaner look.

</details>

<details>

<summary>What language will map labels appear in?</summary>

Felt automatically detects your device's language settings and applies that language to map labels on Felt-provided basemaps.

</details>

<details>

<summary>Do labels change appearance on different basemaps?</summary>

Yes, label and halo colors for layer and annotation labels are automatically reversed when using the dark or satellite Felt basemap for better visibility.

</details>

<details>

<summary>Can I control whether my data appears above or below basemap features?</summary>

Yes! After selecting your basemap, you can adjust layer positioning for polygon layers using the **Position** option in the style editor. This controls whether your data appears above or below basemap road and water features. The default for polygon layers is **Above water and roads**.

</details>

<details>

<summary>Can I add a custom satellite basemap?</summary>

Yes! Custom basemaps allow you to use your own map tiles from external sources by connecting to services that support XYZ ("Slippy map") tile format, including OpenStreetMap, MapTiler, Mapbox Studio, and ArcGIS. XYZ tile URLs provide a template that Felt uses to request map tiles. They must contain parameters for zoom level ({z}), tile row ({x}), and tile column ({y}). Felt also supports TMS format using a negative tile column parameter ({-y}).

See [#add-a-custom-basemap](#add-a-custom-basemap "mention") and [#popular-custom-basemaps](#popular-custom-basemaps "mention") for more information.

</details>

<details>

<summary>What popular basemap sources can I use?</summary>

You can add basemaps from sources like:

* OpenStreetMap
* Google (Satellite, Hybrid, Roads)
* ESRI (World Imagery, Hillshade, Dark Hillshade)
* Stamen Watercolor
* USDA NAIP (USA only)
* USGS Topo and Imagery (USA only)

</details>

<details>

<summary>Can I use XYZ tiles as data layers in the map as well?</summary>

Yes! Custom basemap URLs can be added as layers using Upload Anything's XYZ raster tile support, or as basemaps. See [URLs](/upload-anything/urls#xyz-raster-tiles).

</details>


# Table view

Explore spatial data attributes and properties for better map analysis.

{% embed url="<https://youtu.be/kw9Hsm2WRgk>" %}

Table view is a tabular interface that lets you quickly inspect all the features in your data layers as rows. In addition to scrolling through the data, you can also rename and sort columns, search for specific terms and add filters.

You can access table view a number of different ways:

* Click on the table icon ![](/files/0kvyY6RmHLm6leFaE7Kv) in the toolbar
* When editing any layer, click **...** and select **Open table**
* Viewing the **Data** tab of the detail panel and clicking on the Feature count

  <figure><img src="/files/rwEu8cqFude9ks2gLm6s" alt="" width="162"><figcaption></figcaption></figure>

## Working with table view

### Searching features

Click the search icon on the top-right corner of the table to search throughout all columns.

<figure><img src="/files/yGnnuIKjE4QIY8jFbc71" alt="" width="563"><figcaption></figcaption></figure>

### Sorting by a column

Like above, click on a column to access its options menu, then select **Sort ascending** or **Sort descending** to sort the full table by the values in that column. This works for all column data types: text, numbers, booleans and dates.

### View column stats

There is a handy statistics panel directly in the data table to see column-level stats at a glance you can also easily switch between columns. This includes min, max, mean, median, sum, standard deviation, total values, total unique values, and total null values. This is helpful for data validation and inspection. Available to both map editors and viewers.

To view the stats panel, click on a column header and select **View attribute stats**

<div><figure><img src="/files/TEpl2a4WfRTMWeyFhEj7" alt=""><figcaption></figcaption></figure> <figure><img src="/files/41tmQgWnvnObc8w0kdl5" alt="" width="372"><figcaption></figcaption></figure></div>

### Selecting a feature

Clicking once on a row will select that feature both on the table and in the map, indicated by a pink highlight color. Double-clicking on the row will also zoom to it on the map.

<figure><img src="/files/NXlb3HFh5xGAjmZlpUr6" alt="" width="563"><figcaption></figcaption></figure>

### Renaming columns

Clicking on a column will open its options menu. The first row is a text input where you can rename the column — this new name will also show up in label and popups.

<figure><img src="/files/9WlTkgvxs6IIReORj1T0" alt="" width="563"><figcaption></figcaption></figure>

### Adding a filter

You can add filters for a column directly in the table view. Learn more about [filtering layers](/layers/filters).

<figure><img src="/files/NAjHgPpHydAdhzX24Aoy" alt="" width="375"><figcaption></figcaption></figure>

### Reorder columns

Click on the **...** on the table view toolbar, select **Edit attributes**, and then drag and drop the column names around in the menu. When done reordering click **Update Layer** to save.

<figure><img src="/files/7QVG797AeipIJU9wFwHp" alt="" width="563"><figcaption></figcaption></figure>

### Formatting

You can format numeric attributes directly in the table view. Learn more about [formatting](/layers/formatting).

<figure><img src="/files/KORE7c2PVwIUNH41PNiz" alt="" width="321"><figcaption></figcaption></figure>

## Edit layer metadata

Viewing the underlying data is important, but understanding how it was prepared is just as critical. If you are licensing data from any data providers and need to provide those details in Felt, you can add attribution metadata to data layers in Felt. Adding an attribution to layers in Felt will add attribution information to the credits in the bottom left corner of the Felt map.

From the **...** menu of the detail panel, select **Actions** > **Edit metadata** to add information about a layer's source, attribution or license.

<figure><img src="/files/iiwJDQFJ5TBqoUVRfsI4" alt="" width="375"><figcaption></figcaption></figure>

The Attribution **Display text** section gets added to the map credits at the bottom left corner of the map.

<figure><img src="/files/Z49dfv8QVQsM9Oq3OlGl" alt=""><figcaption></figcaption></figure>

Viewers will be able to access and review the layer metadata via the legend:

{% columns %}
{% column %}

<figure><img src="/files/Gj0hzKgtvAWnscz24B6f" alt=""><figcaption></figcaption></figure>
{% endcolumn %}

{% column %}

<figure><img src="/files/46Pe9WMRFGsUe83EsPFu" alt=""><figcaption></figcaption></figure>
{% endcolumn %}
{% endcolumns %}

## Editing data

Members with Edit permission on a map can edit layers in Felt. From table view, you can edit attributes, add a feature, and manage the attribute columns in the layer.

* To add features, look for the plus sign ![](/files/JKwE0FOXWe1Eb2iMz5Vo) on the top-right section of table view
* Double-click on any cell in the table to edit the value
* Click **...** and select **Edit attributes** to modify the columns available on the layer (add, remove, rename)

  <figure><img src="/files/YhqG4KjL5NqUuW9mekkj" alt="" width="358"><figcaption></figcaption></figure>

See [Editing layers](/layers/editing-layers) to learn more about editing data.


# Editing layers

Felt allows you to add data to layers, edit attributes in the table, and adjust the locations and geometries of existing data.

<figure><img src="/files/Xi0sSL13QXdSqdaBNzyR" alt=""><figcaption></figcaption></figure>

Data editing in Felt lets you modify features and add new features to existing layers in your maps. You can change feature attributes (like names, population values, or any other properties), adjust geometries by moving or reshaping features, and create entirely new features with custom attributes—all while seeing your changes reflected instantly in your map styling, labels, and statistics.

This page walks through the available data editing workflows in Felt. These workflows are available to members with Edit permission on a map (Professional and Enterprise plans), when viewing a map in edit mode.

## Creating new layers

Felt allows you to create new spatial data layers from scratch and edit them from the Field App or on desktop. This is useful when you need to build and maintain a structured dataset, manage assets on the ground, collect records that will persist long-term, and to run reporting from field observations. You need Edit access to create new features or edit data layers on the map. All online edits are immediately reflected for other viewers and collaborators looking at the map.

There are multiple ways to add a new feature to a layer:

* Use the pencil icon in the toolbar <img src="/files/WhGKWWlZJFSJktSA0g5A" alt="" data-size="line"> (steps using the toolbar are outlined below)
* Click on the **Felt menu** (top-left) > **File** > select **Create layer**
* Use the **Cmd+K** shortcut menu and search for **Create layer**

#### Steps

1. Click on pencil dropdown menu <img src="/files/WhGKWWlZJFSJktSA0g5A" alt="" data-size="line">in the toolbar and select **+ Create layer**

   <figure><img src="/files/zaIzyntUDO7oGXD5D4r9" alt="" width="115"><figcaption></figcaption></figure>
2. Enter a name for the new layer and select feature types you want to create (point, line, or polygon)

   <figure><img src="/files/DFdsldSOAQDrT8ogQY5J" alt="" width="332"><figcaption></figcaption></figure>
3. Add attributes to the layer (**+ Add attribute**). (For adding dropdown values, see [#surveys](#surveys "mention") below.)

<figure><img src="/files/rY9rx0xBTIHUe7yJFHF0" alt="" width="563"><figcaption></figcaption></figure>

4. Click **Update layer** and start drawing your first feature by clicking on the map to place points / vertices
5. Once the feature is drawn, fill out the attributes in the attributes panel on the right side and click **Done**

   <figure><img src="/files/kRWTCS1tz6UdlNwQjcuo" alt="" width="375"><figcaption></figcaption></figure>

Your new layer will appear in the legend, and features can be edited on [mobile](#mobile-editing) or desktop, viewed in [table view](/layers/table-view), or [styled](/layers/styling/vector-layers) like any other vector layer in Felt.

{% columns %}
{% column width="66.66666666666666%" %}

<figure><img src="/files/QYqXkXxCxi8FnbnrW1U4" alt="" width="563"><figcaption></figcaption></figure>
{% endcolumn %}

{% column width="33.33333333333334%" %}

<figure><img src="/files/lqPgEBs2Whce7P4efuj6" alt="" width="162"><figcaption></figcaption></figure>
{% endcolumn %}
{% endcolumns %}

#### Surveys

Text and Number attribute types can support dropdowns of pre-set values. When creating the attribute for the new layer, under **Basics**, set **Form type** to **Single select** and then add in all possible values you want to be available from a dropdown menu. You can sort the values that appear in the dropdown manually or alphabetically.

<figure><img src="/files/pD8f3scD30m9XM1DZq5t" alt=""><figcaption></figcaption></figure>

The values will appear as a dropdown when anyone creates a new feature. Blanks or dropdown fields that have not been filled in yet are noted with a `—` value.

<figure><img src="/files/S8WsnYfQGrqEsfujZsby" alt="" width="375"><figcaption></figcaption></figure>

#### Required fields

For any attribute or column you create, you can make it required in the survey under **Basics**.

<figure><img src="/files/cB0VhtNY8lkt9cN3X9uj" alt="" width="370"><figcaption></figcaption></figure>

This requires that the field must be filled out when adding a new feature to the layer. Required fields have an asterisk (\*) next to their name.

<figure><img src="/files/cD5f7kpxPiQQZ0m1q6EO" alt="" width="318"><figcaption></figcaption></figure>

#### Show if conditions

You can set an attribute to only appear in the survey when another field's value meets a condition. This lets you build forms that adapt to earlier answers—for example, only asking for a damage severity rating if a "Damage observed" field is set to `true`, or only showing "Other (please specify)" when a dropdown value is set to "Other."

<figure><img src="/files/z6xrjMp5DJqSlb7StrmM" alt=""><figcaption></figcaption></figure>

To add a condition:

1. Open the attribute settings for the field you want to show conditionally (from the **+ Add attribute** panel while creating a layer, or **Edit attributes** on an existing layer).
2. In the **Survey** section, next to **Show if**, click **Add condition**.
3. Choose the attribute to check, a comparison, and a value. You can add multiple conditions and combine them with **and**/**or**.

Fields with a condition are marked with an icon in the attribute list. A condition can reference another conditional field—if the field it depends on ends up hidden, the dependent field stays hidden too. If a feature already has a value in a field whose condition later stops being met, that value is cleared the next time the feature is saved.

Show if conditions only affect the survey (the feature form used when adding or editing a feature on the map or in the Field App); they don't hide the field from table view or exports, where all attribute values remain visible.

#### Additional field settings

<figure><img src="/files/7T4msn0xHSdA8S0sfWbH" alt="" width="372"><figcaption></figcaption></figure>

Editing a layer's attributes also gives you a few other per-field settings, alongside **Survey** and **Required**:

* **Hidden** (**Survey** section) — removes the field from the feature editor, without deleting its data. Useful for fields that get their value some other way (like imported data) and shouldn't be part of manual data entry.
* **Hidden** (**Table** section) — removes the field from table view, without deleting its data. Useful for fields you want people to fill in without cluttering the table.
* **Allow** (Person fields only) — choose whether a Person field can be assigned to **All workspace users** or only specific **Selected users**.

These settings are available both when creating a new layer and when editing an existing one's attributes (see [#editing-attribute-columns](#editing-attribute-columns "mention")).

#### Supported attribute types

Felt allows you to create point, line, and polygon layers with the following attribute types:

<table><thead><tr><th width="163.515625">Attribute Type</th><th>Examples, or supported types</th></tr></thead><tbody><tr><td>Text</td><td><strong><code>Area 1</code></strong>; <strong><code>Reviewing proposal</code></strong>; <strong><code>Testing!</code></strong></td></tr><tr><td>Number</td><td><strong><code>10</code></strong>; <strong><code>0.54</code></strong></td></tr><tr><td>Boolean</td><td><strong><code>true</code></strong>; <strong><code>false</code></strong></td></tr><tr><td>Date</td><td><strong><code>2027-01-01 16:30</code></strong></td></tr><tr><td>Image</td><td><strong><code>.jpg</code></strong>; <strong><code>.png</code></strong>; <strong><code>.pdf</code></strong></td></tr><tr><td>Person</td><td><img src="/files/yfUcbP0GQ2hs1O0FjEwD" alt="" data-size="line"> <strong>Nora Smith</strong></td></tr></tbody></table>

* You can add multiple images to individual features. Image attributes can be used in the **Image** option for [standard popups](/layers/popup-interactions#standard-popups).
* Person is a data type for assigning teammates in the Felt workspace to specific assets or features

#### Metadata fields

Felt supports a set of metadata fields that are captured and populated automatically based on information about the layer. You can add them like other attributes in the **Edit attributes** modal, and they will only appear in the table view and in exports (not popups or the attributes panel). Because metadata fields are captured automatically, they are read-only and cannot be edited directly.

The metadata fields supported include:

<table><thead><tr><th width="196.953125">Metadata field</th><th width="197.40625">Data type</th><th>Examples</th></tr></thead><tbody><tr><td>Created at</td><td>Date time</td><td><strong><code>2026-01-01 00:00</code></strong></td></tr><tr><td>Created by</td><td>Felt username</td><td><img src="/files/yfUcbP0GQ2hs1O0FjEwD" alt="" data-size="line"> <strong>Nora Smith</strong></td></tr><tr><td>Modified at</td><td>Date time</td><td><strong><code>2026-01-01 00:00</code></strong></td></tr><tr><td>Modified by</td><td>Felt username</td><td><img src="/files/yfUcbP0GQ2hs1O0FjEwD" alt="" data-size="line"> <strong>Nora Smith</strong></td></tr><tr><td>Length (m)</td><td>Number</td><td><strong><code>3,286.50 m</code></strong></td></tr><tr><td>Perimeter (m)</td><td>Number</td><td><strong><code>3,148.46 m</code></strong></td></tr><tr><td>Area (m<sup>2</sup>)</td><td>Number</td><td><strong><code>606,845.84 m²</code></strong></td></tr></tbody></table>

* Length is captured for lines only.
* Area and perimeter are captured for areas only.

## Adding new features

#### Example

Create a new store location point with a monthly revenue of $8,000 that automatically inherits your layer's styling.

<figure><img src="/files/kiaN0Ck1ynK2fWBdVkzd" alt="" width="375"><figcaption></figcaption></figure>

There are multiple ways to add a new feature to a layer:

* Use the pencil icon in the toolbar <img src="/files/WhGKWWlZJFSJktSA0g5A" alt="" data-size="line"> (steps using the toolbar are outlined below)
* Look for the **+** or pencil icon <img src="/files/EfHozdHLRlSdxZK9bCeK" alt="" data-size="line"> in table view

<figure><img src="/files/L3KFTX7og9lkoDBqQ3zF" alt="" width="188"><figcaption></figcaption></figure>

* Click the **+** (Add feature) from the style editor

<figure><img src="/files/7t7rWIPXFQMjjZcne7r7" alt="" width="332"><figcaption></figcaption></figure>

#### Steps

1. **Click on dropdown next to the draw icon** <img src="/files/WhGKWWlZJFSJktSA0g5A" alt="" data-size="line">in the toolbar

   <figure><img src="/files/wibhBZw48LT9eF64Qwiu" alt="" width="375"><figcaption></figcaption></figure>
2. **Select the layer** you want to add features to
3. **Draw on the map** - Click on the map to create your new feature
4. **Add attributes** - fill in any attribute values in the attributes panel on the right

   <figure><img src="/files/kiaN0Ck1ynK2fWBdVkzd" alt="" width="375"><figcaption></figcaption></figure>
5. **Click Done** - Your new feature is added to the layer and styled automatically

{% hint style="info" %}
Felt saves the last layer you edited in the toolbar—you will see the pencil icon has the layer's color on it <img src="/files/f6ye6W5kQQMhAo592YFB" alt="" data-size="line">. You can continue adding features to the existing layer by selecting the pencil icon directly.
{% endhint %}

#### Bulk add mode

<figure><img src="/files/ncUcbHKfNU4NkDNz6ypb" alt="" width="320"><figcaption></figcaption></figure>

When you're adding a lot of features to the same layer, bulk add mode keeps the draw tool armed so you don't have to restart the flow after every feature. Finish one feature and the next click on the map begins another of the same type, running the same required-field checks as saving.

There are two ways to turn it on:

* Click **Add in bulk** in the feature editor header while editing any feature in an editable layer (new or existing)
* Press **⌥A** (Option+A). While you're editing, ⌥A toggles between bulk and single add and keeps your current feature; with nothing selected, it starts a bulk run on the layer currently set as the toolbar's add target. You can also start it from the **Cmd+K** menu with **Bulk add to map**.

Once bulk add mode is on:

* **Points** — each click on the map drops a new point and selects it so you can fill in its attributes.
* **Lines and polygons** — draw and finish a shape, and the next click starts the next one.

You can control how attribute values carry over between features from the small settings menu in bulk add mode. Choose whether each new feature **copies** the values you've entered in the attribute fields—useful when many features share the same attributes—or **resets** the fields with each new feature so you start fresh each time.

<figure><img src="/files/DkVCdKirssEoclUOz1Fw" alt="" width="324"><figcaption></figcaption></figure>

To leave bulk add mode, click **X** or **Finish** in the editor header, press **Esc** (when you're not mid-draw—mid-draw, Esc just finishes the current shape), or select something else, such as a layer in the legend.

#### Snap to vertices

When you create or edit features, Felt snaps your cursor to vertices of nearby visible features so your geometry lines up exactly with existing data. Annotations also snap to feature vertices in the same way.

Snapping is a user setting that's enabled by default. To turn it on or off, from a map select **Felt > View > Snap to vertices**, or open the **Cmd+K** menu and select **Enable snap to vertices** or **Disable snap to vertices**.

#### Undo changes

Press **Command-Z** (Mac) or **Control-Z** (Windows) to undo recent edits while working in the map.

## Editing geometries

#### Example

Resize a boundary or move a building location to reflect updated information.

<figure><img src="/files/q0qrfAEU1ZEUkiIK4g7l" alt="" width="375"><figcaption></figcaption></figure>

There are multiple ways to edit a feature:

* Double-click on a feature
* Click on the pencil icon ![](/files/SJtCf8Zc7YTMdwMFqcOz) in the popup interaction

<figure><img src="/files/invfM6EJR3plzv4VveJk" alt="" width="239"><figcaption></figcaption></figure>

#### Steps

1. **Select a feature** - Double-click any feature on the map to enter edit mode
2. **Modify the geometry** - Use the same controls as annotation editing:
   1. Drag vertices to move them
   2. Right-click to add new vertices
   3. Right-click to delete vertices
   4. Drag the entire feature to reposition it
3. **Click Done** - Your geometry changes are saved

{% hint style="info" %}
You can also enter edit mode by clicking a feature once and then clicking the pencil icon.
{% endhint %}

For existing line features, you can also extend the existing lines to continue drawing a segment. Clicking on an endpoint vertex gives you the option to extend the line segment.

<figure><img src="/files/PC98dvUkHqllyUkl0HPv" alt=""><figcaption></figcaption></figure>

#### Undo changes

Press **Command-Z** (Mac) or **Control-Z** (Windows) to undo recent edits while working in the map.

## Editing attribute values

{% hint style="info" %}
Changes to attributes update your map styling, labels, and statistics dynamically as you make them.
{% endhint %}

#### Example

Update a census tract's population from 8,000 to 11,000 and watch the color change immediately based on your symbology.

<figure><img src="/files/9QXLrFnegu6ok9MrNz4u" alt="" width="563"><figcaption></figcaption></figure>

There are multiple ways to edit a feature:

* Double-click on a feature
* Click on the pencil icon ![](/files/SJtCf8Zc7YTMdwMFqcOz) in the popup interaction
* Double-click on a cell in the layer's table

#### Steps from the map

1. Double-click any feature on the map
2. In the attributes panel, click into any attribute field
3. Update the value
4. Click **Done**

<figure><img src="/files/ff5XvmrmimFPd2acaCa4" alt="" width="375"><figcaption></figcaption></figure>

#### Steps from the table

1. Open the layer's data table
2. Double-click any cell in the table
3. Update the value
4. Press **Enter** or click outside the cell

<figure><img src="/files/PdNLHcAZUKMrY81Otxpj" alt="" width="563"><figcaption></figcaption></figure>

#### Collaborative editing

When multiple editors are editing the map at once you will see their presence at the top of the map, where their cursor is on the map, and in the attribute table for the layer. When a feature is being edited, that row will be highlighted in the table, and the relevant editor's name will be displayed

<figure><img src="/files/7EjBIi4CzbQ90m03sS1p" alt=""><figcaption></figcaption></figure>

## Editing attribute columns

Update existing Felt layers by adding and removing columns from the layer. You can also rename the header titles for the attribute headers. Edits made to the columns affect the columns available everywhere else in Felt: table view, popups, the style editor, etc.

#### Examples

* Adding new columns to an existing dataset to collect new data for an existing layer
* Removing unwanted columns from the Felt table
* Renaming a column to make it easier to understand the data for viewers

There are multiple ways to edit the columns available in a layer:

* Click on the layer's **···** menu and select **Edit attributes**
* In the **Data** tab of the detail panel, select **Edit attributes**
* Click on a column header and select **Edit attribute**
* Click on **···** from the table view and select **Edit attributes**

<figure><img src="/files/d04jSiY5svTa3byXLtbx" alt="" width="358"><figcaption></figcaption></figure>

#### Steps

1. Click on the layer's **···** menu and select **Edit attributes**
2. You will see a panel that allows you to edit or delete any existing columns.
3. And you can also add new columns in this panel (see **+ Add attribute** bottom-left)

<figure><img src="/files/N2MNpI7MC5dzyUWvsSWS" alt="" width="563"><figcaption></figcaption></figure>

## Deleting features

#### Example

Cleaning up or updating a dataset to remove outdated or erroneous features.

<figure><img src="/files/KkjyojIq7Um06EGV0C77" alt="" width="563"><figcaption></figcaption></figure>

There are multiple ways to edit a feature:

* Click on a feature and hit the **Delete** key
* Click on **Delete** from the overflow menu **···** in the popup interaction
* Right-click on a row in table view and select **Delete**

#### Steps from the map

1. Click any feature on the map
2. In the popup panel, click the **···** menu
3. Select **Delete** from the menu

<figure><img src="/files/6Gxuj6s5pMAgDz2WEpTc" alt="" width="375"><figcaption></figcaption></figure>

#### Steps from the table

1. Open the layer's data table
2. Right-click any cell for the feature you want to delete
3. Select **Delete** from the menu

<figure><img src="/files/SUlKXevHb97ZB8qyp1P2" alt="" width="375"><figcaption></figcaption></figure>

#### Undo changes

Press **Command-Z** (Mac) or **Control-Z** (Windows) to undo recent edits while working in the map.

## Mobile editing

With the Field App, Felt's native mobile app, data editing is available on mobile devices with the same capabilities as desktop. Use tap gestures to add and edit features and feature attributes through the attributes panel. To get started with the Field App see [Getting started](/field-app/getting-started) and download the Felt app on your [Android](https://play.google.com/store/apps/details?id=com.felt.mobile) or [iOS](https://apps.apple.com/us/app/felt-maps-field-surveys-gis/id6754033379) device.

<figure><img src="/files/dgzFtFORkwnZjydTvBac" alt="" width="219"><figcaption></figcaption></figure>

## Technical details

#### How edits are stored

When you edit a layer in Felt, you're editing the specific copy of that layer in your current map. Your edits don't affect the original data source or any other maps using that layer.

#### Collaborative editing

Multiple collaborators can edit the same map simultaneously. Each person's edits are saved to the layer in real-time. You won't see each other's undo/redo history—only the final saved changes.

When multiple editors are editing the map at once you will see their presence at the top of the map, where their cursor is on the map, and in the attribute table for the layer. When a feature is being edited, that row will be highlighted in the table, and the relevant editor's name will be displayed

<figure><img src="/files/7EjBIi4CzbQ90m03sS1p" alt="" width="563"><figcaption></figcaption></figure>

#### Layer copying behavior

When you copy a layer, you copy all edits that have been made to it up to that point. However, the copied layer becomes independent—any further edits to either the original or the copy won't affect the other.

#### Complex geometries

You can edit features with complex geometries (like multi-polygons or polygons with holes), moving or adjusting the existing parts. However, you currently cannot create new complex geometries from scratch.

#### API and SDK

The REST API and JavaScript SDK currently don't support data editing. The JavaScript SDK is view-only and doesn't reflect editing capabilities. API references to "elements" refer to annotations, not data layers.

## Tips and best practices

#### Add features quickly with the toolbar

Felt saves the last layer you edited in the toolbar—you will see the pencil icon has the layer's color on it <img src="/files/f6ye6W5kQQMhAo592YFB" alt="" data-size="line">. You can continue adding features to the existing layer by selecting the pencil icon directly.

<figure><img src="/files/faIs5yTgCZsbkpMwUNSu" alt="" width="141"><figcaption></figcaption></figure>

#### Control who can edit

Pay attention to who has Edit access to your maps. Anyone who can edit the map can modify the underlying data.

#### Use layer copying as checkpoints

Since there's no edit history beyond the in-app undo stack, create copies of your layer at important milestones. This gives you a way to checkpoint your work:

* Make edits to your layer
* When you reach a stable state, copy the layer
* Continue editing the original
* If you need to revert, delete the edited version and work from your copy

#### Create playground versions

If you want to experiment with data without affecting your main map, copy the layer first and work on the copy. You can always delete experimental versions or keep them if the changes work out.

#### Consider your workflow

Think about layer copying as version control for your map data. Build up changes incrementally and create copies when you want to preserve a particular state.

## Frequently asked questions

<details>

<summary>Who can edit data layers in Felt?</summary>

Members with Edit permission on a map can edit layers. Layer editing is available on Professional and Enterprise plans.

</details>

<details>

<summary>When should I use Layers instead of Annotations (formerly called "elements") for editing data on the map?</summary>

For most workflows, editing data layers in Felt is the better choice. Annotations work well for quick markup and very small datasets. Here's when to use each:

**Layer editing is best for:**

* Asset tracking and managing datasets with more than 100 features
* Using table view to see and edit all your data at once
* Advanced styling options (categorical symbology, graduated colors, zoom-based visibility, label control, etc.)
* Better map performance through tiling (especially important for large datasets)
* The ability to export and reuse your data across multiple maps
* Mobile data collection (see [Field App](/field-app/getting-started))
* Professional and Enterprise workflows in Felt

**Annotations are best for:**

* Quick visual markup for presentations or comments
* Simple styling for a handful of features
* Lightweight additions that don't need structured data management
* Personal plans in Felt (uploads aren't available on Personal, but annotations are)

You can [convert annotations to a data layer](/annotations/converting-annotations-layers) to get started with editable layers. Right-click your group of annotations and select **Actions** → **Convert to layer** to unlock full layer functionality.

</details>

<details>

<summary>Does Felt support survey responses?</summary>

Yes, Felt supports dropdown menus with predetermined values for editable data! See [#surveys](#surveys "mention") to learn more about setting up dropdowns for new layers.

</details>

<details>

<summary>Can I undo changes after I've saved them?</summary>

You can use the undo stack (**Command-Z** or **Control-Z**, or tapping the undo buttons on the mobile Field App) for recent changes, but once you've closed the map or cleared your browser, those changes are permanent. Create layer copies as checkpoints if you need the ability to revert to previous states.

</details>

<details>

<summary>Do my edits affect other maps using this data?</summary>

No. When you edit a layer, you're editing only the copy in your current map. Other maps using the same original data source remain unchanged.

</details>

<details>

<summary>If I edit a layer, do those changes appear in other maps?</summary>

No. Edits are specific to the layer instance in your current map and don't propagate to other maps using the same data source. Each map has its own independent version of the layer.

</details>

<details>

<summary>Can multiple people edit at the same time?</summary>

Yes. All collaborators with Edit access can modify the map simultaneously, and changes save in real-time. However, you won't see each other's undo history—only the final saved changes.

</details>

<details>

<summary>Why don't my statistics/symbology update immediately when I make large changes?</summary>

Most changes reflect instantly, but in some cases (like when you exceed the current range of a numeric style), updates may take time to process. Symbology and statistics are recalculated nightly for all layers.

</details>

<details>

<summary>Can I edit data I've imported from cloud sources or live layers?</summary>

Yes. Once data is in Felt, you can edit it regardless of the original source. However, edits only apply to the Felt version—they don't sync back to your original files or databases.

</details>

<details>

<summary>Is there a permanent edit history?</summary>

Not right now. You can use the undo stack (**Command-Z** or **Control-Z**) for recent changes, but once you've closed the map or cleared your browser, those changes are permanent. Create layer copies as checkpoints if you need the ability to revert to previous states.

</details>

<details>

<summary>Can I create empty layers from scratch?</summary>

Yes, see [#creating-new-layers](#creating-new-layers "mention").

</details>

<details>

<summary>Can I show or hide survey fields based on other answers?</summary>

Yes. Use show if conditions to have a field only appear in the survey when another field's value meets a condition you set. See [#show-if-conditions](#show-if-conditions "mention").

</details>

<details>

<summary>What can you delete with this feature?</summary>

You can delete features / rows from the map view or table view (see [#deleting-features](#deleting-features "mention")). At this time, you cannot delete columns within layers.

To control what viewers see in popups, check out our [popup styling page](/layers/popup-interactions#standard-popups).

</details>

<details>

<summary>How do I edit a feature when popups are disabled?</summary>

You can edit the feature from table view, or by right-clicking on the feature, hovering over the **Select** option in the menu, and selecting the feature from the menu.

<figure><img src="/files/ngJULmdyfiQGJSZ1HcRH" alt=""><figcaption></figcaption></figure>

</details>

<details>

<summary>Is there a max size limit for uploading images to comments or features?</summary>

The max size an image can be is 20MB.

</details>


# Filters

Build interactive query expressions for spatial and attribute-based filtering.

{% embed url="<https://youtu.be/kw9Hsm2WRgk?si=STekdDMG-ucshYTv&t=36>" %}

Filters are conditions added to your data layers to only show a subset of features in the map, in the [Table View](/layers/table-view) or as the input for [Analysis](/layers/spatial-analysis).

## Adding filters to a layer

Filters work on all data types, including text, numbers, booleans and dates. Filters can be added to a layer in two ways:

* Directly from the Table View by clicking on a column, then on **Add filter...**
* In the **Filter** tab of the detail panel, by clicking on the **Add filter** button.

<figure><img src="/files/Wd0SLb3xEVUdXPxtgpxy" alt=""><figcaption></figcaption></figure>

## Creating new filtered layers

It can be useful to create new derived layers that contain just the filtered data from the original. This can be achieved by clicking on the **# features** button, then selecting the **Update in new layer** option from the dropdown menu.

<div align="left"><figure><img src="/files/tOLw8RImmI6ZEyAjz59u" alt="" width="327"><figcaption></figcaption></figure></div>

## Filters & Analysis

[Analysis](/layers/spatial-analysis) operations can use filtered layers as input, which is very convenient for quick data wrangling & exploration.


# Styling

{% embed url="<https://40056855.fs1.hubspotusercontent-na1.net/hubfs/40056855/StyleData_HelpCenter.mp4>" %}

Felt offers a comprehensive set of styling options for both [vector](/layers/styling/vector-layers) and [raster](/layers/styling/raster-layers) layers to enhance your map's visual appeal. Change your [basemap](/layers/basemaps) between default, satellite, light/dark themes, or add custom basemaps via URLs. Style vector data (points, lines, polygons) by adjusting colors, opacity, stroke width, and creating size-based or categorical visualizations based on data attributes. Use zoom-based styling to ensure your map looks good at all scales by automatically adjusting feature size and opacity as users zoom. For raster data, apply color ranges, categorical styling, hillshading, or perform raster algebra operations. The sandwiching feature lets you control whether features appear above or below basemap elements like roads and water, creating professional-looking visualizations.

Learn more about styling [vector](/layers/styling/vector-layers) and [raster ](/layers/styling/raster-layers)layers.


# Vector layers

Style your points, lines and polygons by customizing style properties to create engaging Felt maps.

{% embed url="<https://www.youtube.com/watch?v=MnWHl-U47f8>" %}

The style editor provides different options for styling points, lines, and polygons, allowing you to control color, size, opacity, and many other visual properties. You can create simple maps or data-driven visualizations that vary based on attributes.

## The style editor

Once your data is uploaded to Felt you can style your layers with the style editor.

<figure><img src="/files/AdVTJlsgf6Dg3XZD9wLc" alt="" width="375"><figcaption></figcaption></figure>

* To open the style editor, click on the layer you want to customize from the legend

{% embed url="<https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmRfGitkyjOEMvVsEyGWN%2Fuploads%2FwbhRtYzKim6FHAN4fPRg%2FScreen%20Recording%202025-03-02%20at%202.08.59%E2%80%AFPM.mp4?alt=media&token=9e705ad1-1a96-427a-93fa-0d4d92389859>" %}

## Choosing your map type

Depending on the geometry of your vector layer (point, line or polygon), you will have different visualization options. To select your visualization choose it from the Type dropdown in the General section of the style editor.

<figure><img src="/files/vw4QC4n7x9WgBYTcuP6S" alt="" width="296"><figcaption></figcaption></figure>

{% hint style="info" %}
If a polygon doesn't have a fill, popup interactions only work when clicking on the stroke (outline), not in the interior area. Make sure your polygon has a fill if you want clickable popups throughout.
{% endhint %}

### Simple

The default style when you upload a data layer — a single color for all features. Available for point, line and polygon layers.

<figure><img src="/files/8PNe0i92p8m3aIDmsahz" alt=""><figcaption></figcaption></figure>

### Categories

A categorical visualization maps a distinct color for every unique value of your chosen data attribute. A common type of categorical visualization are landuse maps where each landuse type is set to a distinct color. Available for point, line and polygon layers.

{% hint style="info" %}
Felt supports up to 256 unique categories in the legend.
{% endhint %}

<figure><img src="/files/qwILryr4J58FTq6lqyWc" alt=""><figcaption></figcaption></figure>

### Color range

A color range visualization maps numeric data values to a gradient of colors, making patterns immediately visible. Traditionally used for choropleth maps with polygons, Felt extends this to points and lines as well. Colors can be applied continuously in direct proportion to values or grouped into distinct classes using various classification methods.

<figure><img src="/files/IRXsUXOPrAcgv73eFAVD" alt=""><figcaption></figcaption></figure>

<details>

<summary>Learn more about classification methods for numeric data</summary>

There are many ways to style a data layer by a numeric field. For example, a **Continuous** style maps a color (or point size) for every unique value in your data, similarly to a categorical visualization. In this case, the color for each value is interpolated from the endpoint colors.

However, it’s more common to group values from numeric fields into *classes* (green from 0 to 5, yellow from 6 to 10, etc). Classes can be chosen manually or picked from one of Felt’s default classification methods:

* **Equal Intervals**: classes are split by an interval of constant value (0, 5, 10, 15…). Useful for evenly distributed data. Equal interval classifications are very sensible to outliers - very small or large values can lead to the majority of values to be grouped into just one or two classes. This classification method follows an *Arithmetic Series*, where the value of each breakpoint is equal to the previous value plus a constant value.
* **Quantiles**: contrary to equal intervals, the quantiles classification ensures that every class contains the same number of values. This can look nice from a visual standpoint, but often quantiles classifications can be misleading, since the size of each class may vary widely. They work well for evenly distributed datasets.
* **Standard Deviation**: the Standard Deviation method chooses classes based on the number of standard deviations from the mean. This classification method works very well for data that follows a bell curve (a Gaussian or “normal” distribution).

By default, the legend in a Standard Deviation classification does not show the breakpoint values, using instead the nº of standard deviations.

* **Geometric Intervals**: a classification method where the size of each class increases exponentially, very useful for right-skewed data. The term “Geometric” comes from the fact that the class breaks are chosen from a *geometric series* (where each value equals the previous value, multiplied by a constant coefficient).
* **Jenks Natural Breaks:** the Jenks optimization method can be used to find “natural” classes inside your data by minimizing the variation inside classes while maximizing the variation between classes. It works well for most kinds of distributions, which is why it’s the default method in Felt.

</details>

### Size range

A size range visualization scales points and lines based on numeric values, emphasizing differences in magnitude. Sizes can be applied continuously in direct proportion to values or grouped into distinct classes using various classification methods. Available for point and line layers.

<figure><img src="/files/Xk4pxoklNlzwzuJfLuWM" alt=""><figcaption></figcaption></figure>

<details>

<summary>Learn more about classification methods for numeric data</summary>

There are many ways to style a data layer by a numeric field. For example, a **Continuous** style maps a color (or point size) for every unique value in your data, similarly to a categorical visualization. In this case, the color for each value is interpolated from the endpoint colors.

However, it’s more common to group values from numeric fields into *classes* (green from 0 to 5, yellow from 6 to 10, etc). Classes can be chosen manually or picked from one of Felt’s default classification methods:

* **Equal Intervals**: classes are split by an interval of constant value (0, 5, 10, 15…). Useful for evenly distributed data. Equal interval classifications are very sensible to outliers - very small or large values can lead to the majority of values to be grouped into just one or two classes. This classification method follows an *Arithmetic Series*, where the value of each breakpoint is equal to the previous value plus a constant value.
* **Quantiles**: contrary to equal intervals, the quantiles classification ensures that every class contains the same number of values. This can look nice from a visual standpoint, but often quantiles classifications can be misleading, since the size of each class may vary widely. They work well for evenly distributed datasets.
* **Standard Deviation**: the Standard Deviation method chooses classes based on the number of standard deviations from the mean. This classification method works very well for data that follows a bell curve (a Gaussian or “normal” distribution).

By default, the legend in a Standard Deviation classification does not show the breakpoint values, using instead the nº of standard deviations.

* **Geometric Intervals**: a classification method where the size of each class increases exponentially, very useful for right-skewed data. The term “Geometric” comes from the fact that the class breaks are chosen from a *geometric series* (where each value equals the previous value, multiplied by a constant coefficient).
* **Jenks Natural Breaks:** the Jenks optimization method can be used to find “natural” classes inside your data by minimizing the variation inside classes while maximizing the variation between classes. It works well for most kinds of distributions, which is why it’s the default method in Felt.

</details>

### Heatmap

A heatmap visualization uses color gradients to represent point density, highlighting areas of higher and lower concentration. Colors transition smoothly to reflect varying densities, with options to adjust intensity, radius, and color scheme. Available for point layers.

<figure><img src="/files/81Pz4WmulwIreakoglHi" alt=""><figcaption></figcaption></figure>

### H3

A H3 visualization groups points into hexagons, displaying point counts or aggregated numeric attributes (sum, average, max, or min). Choose a fixed H3 resolution for a consistent view across zoom levels or allow the resolution to adjust dynamically. Use popups to reveal additional aggregated values on hover or click. Available for point layers.

Check out [this video](https://www.youtube.com/watch?v=-9gIkHuJCMY) to learn more about H3 visualizations.

<figure><img src="/files/iTBBhMRoOs2Dd6NxxWru" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
Filtered H3 visualizations are estimates. For optimal accuracy, create a new layer from the filter and apply the H3 visualization to the new layer.
{% endhint %}

### Icons

Customize your point data with a variety of icons to make your map more intuitive and visually appealing. Select from Felt's built-in icon library, emojis or upload custom icons by clicking the **Icon** dropdown in the **Point** section of the style editor. Available for point layers.

<figure><img src="/files/LGKjZ4aH6lPqbkycz9sV" alt=""><figcaption></figcaption></figure>

#### Custom icons

Upload your own icon sets to Felt to personalize your maps, highlight key features, or align them with your organization's branding. Icons are a powerful way to visually differentiate categories or other attributes within your point data, helping viewers quickly interpret the information. With Felt, you can organize your icons into Themes, making it easy to manage and apply them consistently across projects. Plus, shared access within your workspace ensures seamless collaboration and a unified look for your maps.

**Uploading custom icons**

Felt supports a wide variety of image formats, including .png, .jpg, .svg, and other [common image file types](https://developer.mozilla.org/en-US/docs/Web/Media/Formats/Image_types). To add icons, click the Upload icons button from the Custom tab of a point layer’s Icon picker.

<figure><img src="/files/pcs3qS4xa17mScyCG8PL" alt="" width="375"><figcaption></figcaption></figure>

You can upload icons one at a time, or you can select many icons to upload at once by selecting them in the file picker.

<figure><img src="/files/LKT3mq6G2dZUZ1JrODed" alt="" width="375"><figcaption></figcaption></figure>

Add icons to a single map, or make them available across all maps by adding them to your workspace. When you have many icons, you can assign icons themes to make browsing and searching more manageable.

<figure><img src="/files/ZOFhwVaTfkPCxYk6sXaS" alt="" width="375"><figcaption></figcaption></figure>

Once icons have been uploaded, you can edit or delete them via the Edit icons button on the Custom tab of the Icon picker.

<figure><img src="/files/z7AsemgIfiaGFzF0anHO" alt="" width="375"><figcaption></figcaption></figure>

### Fill patterns

Fill polygons with a repeating pattern instead of a solid color — hatching for disputed areas, dots for soil types, and other classic cartographic textures. Available for polygon layers using the Simple visualization type.

To apply a pattern:

* Click **Fill** in the **Polygon** section of the style editor
* In the **Fill style** section below the color picker, choose a style: **Solid**, **Hatch**, **Reverse hatch**, **Cross-hatch**, **Horizontal lines**, **Vertical lines**, or **Dots**
* Adjust **Spacing** to control the gap between lines or dots, and **Thickness** to control their weight

Felt draws the pattern in the layer's fill color, and the basemap shows through between the strokes. The legend and the Fill chip both update to match the pattern on the map. Patterns also follow [zoom-based fill colors](#interpolating-style-properties), so a pattern can change color as viewers zoom in or out.

{% hint style="info" %}
Fill patterns are currently only available with the Simple visualization type. Switching a patterned layer to Categories or Color range clears the pattern.
{% endhint %}

## Labelling

Good labeling give maps meaning by improving clarity, directing attention, and maintaining visual balance. A well-labeled map helps users quickly find what they need without feeling cluttered or overwhelming.

To turn labels on for a layer, choose the attribute from the **Label by** dropdown

<figure><img src="/files/K8FV68ZDuu8uXeiNRg7v" alt="" width="298"><figcaption></figcaption></figure>

You can then fine-tune them in the following ways:

* **Size**: choose between small, medium and large sizes.
* **Color**: choose a color from the color picker or directly input an RGB, hex or HSL value.
* **Halo**: choose a color and width for the halo surrounding the label text.
* **Style**: many more options to customize your labels, including:
  * **Weight**: regular, medium, bold and italic weights, or a combination of these.
  * **Case:** convert labels to lower or uppercase.
  * **Letter spacing:** spacing between letters, in pixels.
  * **Line spacing:** spacing between lines, in pixels.
  * **Max length:** max character length for labels.
  * **Placement:** choose between automatic placement or prefer a certain direction (top, right, etc).
  * **Offset:** the offset between the feature and label, in pixels.
  * **Padding:** label padding is the amount of transparent pixels to add around your label items. Increasing this amount will result in fewer labels in the map.

### Formatting labels

Labels use the column's [formatting](/layers/formatting) automatically. When a column is set to display as currency, a percentage, or a fixed number of decimals, its labels update to match, with no style override needed. A `revenue` column formatted as currency labels each feature `$1,234,567` instead of `1234567`.

To change how a label's values are formatted:

* Open the [table view](/layers/table-view) and click the column name, then choose **Format**
* Pick a **Number**, **Percent**, **Distance**, **Area**, or **Custom** format and adjust the decimals, units, or thousands separators
* The label on the map updates to match, along with the same column in the table, popups, and components

To combine several attributes into one label, add literal text, or split a label across lines, use a `text-field` [MapLibre style override](#customizing-labels).

## Zoom-based styling

One of the more challenging aspects of digital cartography is ensuring your maps look good at all zoom levels. Felt gives you control over what your visualizations look like at each zoom by letting you not only control visibility of features and labels but also interpolate styling properties between zoom levels.

The legend will always sync to the style that matches the current zoom level of the map. This ensures a viewer always sees accurate symbology between the legend and map.

### Setting Visibility

Adjust feature and label visibility by setting a visible zoom range for each using the **Limit visibility** ![](/files/H1jQe0Q5fwPMmhSacRsw)option. This helps maintain visual hierarchy and readability, ensuring labels and features appear only at the zoom levels where they are most effective.

<figure><img src="/files/pdjMmLW9mQp3nuWx45te" alt="" width="563"><figcaption></figcaption></figure>

### Interpolating style properties

Zoom-based styling in Felt allows you to adjust visual elements like line thickness, opacity, and color at different zoom levels, creating maps that reveal appropriate details as users zoom in or out. This technique enables features like roads to appear thinner at zoomed-out views and thicker when zoomed in, or polygons to gradually fade in as the user zooms closer to a specific area.

{% columns %}
{% column %}

<figure><img src="/files/jNsHUknvIVTHQezByM3q" alt="" width="238"><figcaption></figcaption></figure>
{% endcolumn %}

{% column %}

<figure><img src="/files/EHpjmKEa94Ogs3JOjGL0" alt="" width="238"><figcaption></figcaption></figure>
{% endcolumn %}
{% endcolumns %}

Check out [this video](https://www.youtube.com/watch?v=cHo2cyK7Frc) to learn more about interpolating style properties.

{% embed url="<https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmRfGitkyjOEMvVsEyGWN%2Fuploads%2FhLYjT8XXTBZTXYt5Zlv5%2Fzoom_interpolation_line_width.mp4?alt=media&token=c1816fb3-0394-424c-9f1e-1153fba694bf>" %}

## Customizing your legend

Add a caption, retouch colors and display names in the **Legend** tab.

{% embed url="<https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmRfGitkyjOEMvVsEyGWN%2Fuploads%2FNWpHI8A8beG3jB5o5yfb%2FScreen%20Recording%202025-03-03%20at%208.10.28%E2%80%AFPM.mp4?alt=media&token=8088deea-f1c8-4869-8b8b-653157053703>" %}

## Resetting layer styles

If at any point you want to go back to the default style, all you have to do is click on the **Actions > Reset styles** option in a layer’s overflow (three dots) menu

{% embed url="<https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmRfGitkyjOEMvVsEyGWN%2Fuploads%2FVk2x9p5rIIbeeI96W5eA%2FScreen%20Recording%202025-03-03%20at%208.15.25%E2%80%AFPM.mp4?alt=media&token=8a5b81fc-17e6-4eee-bcf3-c9b8cb7ead87>" %}

## Copy and paste layers

Copying and pasting layers between maps streamlines your workflow when working with multiple maps and ensures consistent visualization across your projects. This is particularly useful when you want to bring an already styled layer, multiple layers or a layer group onto another map or quickly use template layers across multiple maps. All styling, layer filters, components, popup and legend configurations are copied over.

{% hint style="info" %}
This same functionality is available for [raster layers](/layers/styling/raster-layers).
{% endhint %}

### Copy and paste a single layer

* Click on the three dot layer menu and choose the option to **Copy** (or use the [keyboard shortcut](/getting-started/keyboard-shortcuts) **Ctrl+C** (Windows) or **Cmd+C** (Mac))

<figure><img src="/files/vraJ34kJodpX2k18gX4z" alt="" width="563"><figcaption></figcaption></figure>

* Navigate to the destination map and right-click anywhere on the map canvas and choose the option **Paste here** (or use the keyboard shortcut **Ctrl+V** (Windows) or `Cmd+V` (Mac))

<figure><img src="/files/jztzEoSqwHwkG4nlJ88c" alt="" width="563"><figcaption></figcaption></figure>

* The copied layer will appear with all its original styling and configurations intact

<figure><img src="/files/ro6bpc5Ja2cxe6SHcfS1" alt="" width="563"><figcaption></figcaption></figure>

### Copy and paste multiple layers

Use the [List](/layers/list) view to copy and paste multiple layers to another map at once.

* Use **Shift+click** to select the layers you want to copy and right-click to **Copy** (or use the [keyboard shortcut](/getting-started/keyboard-shortcuts) **Ctrl+C** (Windows) or **Cmd+C** (Mac))

<figure><img src="/files/K8CJNiTVOdhoh6Wq8rL6" alt="" width="563"><figcaption></figcaption></figure>

* Navigate to the destination map and right-click anywhere on the map canvas and choose the option to **Paste here** (or use the keyboard shortcut **Ctrl+V** (Windows) or `Cmd+V` (Mac))

<figure><img src="/files/p64HEZ0ZQRt8LXy0KWVP" alt="" width="563"><figcaption></figcaption></figure>

* The copied layers will appear with their original styling and configurations intact

<figure><img src="/files/YwjSVR25MJ5ZH1FRlj0h" alt="" width="563"><figcaption></figcaption></figure>

### Duplicate layers

When working within the same map, you can use the Duplicate option to duplicate a single layer or multiple layers with all styling and configurations preserved.

* Click on the three dot layer menu and choose the option to **Duplicate** (or use the [keyboard shortcut](/getting-started/keyboard-shortcuts) **Ctrl+D** (Windows) or `Cmd+D` (Mac))

<figure><img src="/files/W8cWGrk37NFSg8csqmDE" alt="" width="563"><figcaption></figcaption></figure>

* To duplicate multiple layers go to [List](/layers/list) view and use **Shift+click** to select the layers you want, right-click and select the option to **Duplicate**

<figure><img src="/files/YLTSUMVGE7NXKeGOfXVb" alt="" width="563"><figcaption></figcaption></figure>

* The duplicated layers will appear with their original styling and configurations intact

## Advanced styling

For more control fine-tuning your visualization or if you prefer writing style through code you can use the advanced style editor.

To open the advanced editor for any layer

* Click on the layer's **···** menu and select **Actions > Edit style language**
* Once opened, you’ll see the advanced editor open on the right-hand side of the screen. This panel contains the [Felt Style Language](https://developers.felt.com/felt-style-language/getting-started) (FSL) for the selected layer.

{% embed url="<https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmRfGitkyjOEMvVsEyGWN%2Fuploads%2Fk8a3H3wNJKIckRTLcvxq%2FScreen%20Recording%202025-03-04%20at%208.34.09%E2%80%AFAM.mp4?alt=media&token=e73202c5-1d30-4e07-b46e-e9e798510099>" %}

The [Felt Style Language (FSL)](https://developers.felt.com/felt-style-language/getting-started) is a JSON-based specification of Felt styles, and is the single source of truth for a layer’s style. You can check this yourself by making changes in the style editor while having the advanced style editor open:

{% embed url="<https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmRfGitkyjOEMvVsEyGWN%2Fuploads%2FUAXX30I1CgN8S4P2qJUR%2FScreen%20Recording%202025-03-04%20at%208.46.49%E2%80%AFAM.mp4?alt=media&token=24bd9b6b-10e6-4688-93ce-48b231589e2f>" %}

Learn more about FSL in our [Developer docs](https://developers.felt.com/felt-style-language/getting-started).

### MapLibre style overrides

Use `paintPropertyOverrides` in the advanced style editor to access any of [MapLibre’s](https://maplibre.org/maplibre-style-spec/layers/) `paint` or `layout` styling capabilities. This lets you apply advanced effects like icon rotation, drop shadows, and offset geometry, or build custom, data-driven visualizations such as bivariate maps and attribute-based styles. It’s especially useful when you need more control than Felt’s built-in style options.

#### To apply a MapLibre override

* Open the advanced style editor
* Inside the `paint` block, add a `paintPropertyOverrides` object
* Insert any supported MapLibre property

#### Tips & Best Practices

* Property names must match [MapLibre's documentation](https://maplibre.org/maplibre-style-spec/layers/)
* Overrides take precedence over FSL’s auto-generated properties (for example, if you set the MapLibre `fill-color` property it will override the FSL `color` property)
* The legend will not reflect the MapLibre style overrides
* Invalid or mismatched properties are silently ignored

#### Examples

**Color based on a column/attribute**

* If your data includes a field with color values (like `#FF5733`), you can use style overrides to color each feature based on its assigned color in the data. In the example below, you can see that `fill-color` overrides the FSL `color` property.

```json
"paint": {
    "color": "rgb(235, 147, 96)",
    "isClickable": false,
    "isHoverable": false,
    "isSandwiched": false,
    "opacity": 0.8,
    "strokeWidth": 0,
    "paintPropertyOverrides": {
        "fill-color": ["get", "color"]
    }
  }
```

{% embed url="<https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmRfGitkyjOEMvVsEyGWN%2Fuploads%2F66qpVitdfdTOTsRncRkX%2Fbathymetry.mp4?alt=media&token=98185b66-5aa0-4044-ba7f-2c5956ba73ad>" %}

**Bivariate styling**

* A bivariate map visualizes two variables at once - often by combining color (for a categorical attribute) and size (for a numeric attribute). In the example below, each country point is colored by its continent using a categorical style set in the style editor and then sized by its population by adding the MapLibre `circle-radius` property in the advanced style editor

```json
"paint": {
    "color": "@catPalette4",
    "isClickable": true,
    "isHoverable": false,
    "opacity": 0.9,
    "size": 3,
    "strokeColor": "auto",
    "strokeWidth": 1,
    "paintPropertyOverrides": {
      "circle-radius": [
        "interpolate",
        ["linear"],
        ["get", "population"],
        71801000, //min population value
        8, //min symbol size
        1463870000, //max population value
        40 //max symbol size
      ]
    }
  }
```

{% embed url="<https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmRfGitkyjOEMvVsEyGWN%2Fuploads%2FL7AkWXWccnmW1WtYdnRt%2Fbivariate.mp4?alt=media&token=6cf4e4ac-50c6-4143-9c57-c642d629002c>" %}

#### Concatenating labels

Style overrides work on labels too. In the `label` block's `paintPropertyOverrides` you can set any of MapLibre's text and symbol properties, for finer control than the built-in label options give you. The example below combines several attributes into one label, but the same approach applies to anything MapLibre exposes for label rendering.

A label set through the **Label by** dropdown already respects the column's [formatting](/layers/formatting): set a column to currency, percent, or a fixed number of decimals and its labels match, with no override needed. To build a label from more than one attribute, override the `text-field` property.

Two expressions do most of the work here:

* `concat` joins pieces together: attributes, literal text like `"$"` or `" feet"`, and line breaks. Use `\n` to start a new line.
* `number-format` formats a number. A `text-field` override builds the label from scratch, so a raw value like `1234567` comes through unformatted. Wrap it in `number-format` to get `1,234,567`.

**String + numeric label with formatting**

This example puts a product category on the first line and a formatted revenue value below it.

```json
"label": {
    "color": "auto",
    "fontSize": 13,
    "fontWeight": 500,
    "haloColor": "auto",
    "haloWidth": 1,
    "placement": "auto",
    "paintPropertyOverrides": {
      "text-field": [
        "concat",
        ["get", "product_category"],
        "\n",
        "$",
        ["number-format", ["get", "total_revenue"], { "max-fraction-digits": 0 }]
      ]
    }
  }
```

<figure><img src="/files/nKuzpY2PmvGCyeqJjtJh" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
Tip: Add `{ "max-fraction-digits": 0 }` to drop decimals, or `{ "min-fraction-digits": 2, "max-fraction-digits": 2 }` to add.
{% endhint %}

**Concatenate multiple attributes**

When you are only joining text, no number formatting is needed. `concat` alone builds a clean multi-line label. The example below concatenates address, city and state attributes.

```json
"label": {
    "color": "auto",
    "fontSize": 13,
    "fontWeight": 500,
    "haloColor": "auto",
    "haloWidth": 1,
    "placement": "auto",
    "paintPropertyOverrides": {
      "text-field": [
          "concat",
          ["get", "Address"],
          "\n",
          ["get", "City"],
          ", ",
          ["get", "State"]
        ]
    }
  }
```

<figure><img src="/files/w4KFXFPkufREgj0KRriJ" alt=""><figcaption></figcaption></figure>

**Percentage**

`number-format` has no percent mode, so multiply the value by 100 yourself and append `"%"`. A rate of `0.873` becomes `87.3%`. For a single-attribute label, the column's Percent format does this for you.

```json
"text-field": [
  "concat",
  ["number-format", ["*", ["get", "rate"], 100], { "max-fraction-digits": 1 }],
  "%"
]
```

<figure><img src="/files/FT3DJ2b2TxIJHYMWGYpP" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
A few things to keep in mind:

* A single-attribute label already uses the column's formatting, so you only need a `text-field` override to combine attributes, add literal text, or split a label across lines.
* Use `number-format`, not `to-string`, when you want thousands separators. `to-string` returns the raw digits with no grouping.
* Don't wrap identifiers like ZIP codes or years in `number-format`, or they'll pick up separators (`33,511`, `2,024`). Reference those fields directly.
* The full list of `number-format` options (`currency`, `locale`, `min-fraction-digits`, `max-fraction-digits`) is in [MapLibre's number-format reference](https://maplibre.org/maplibre-style-spec/expressions/#number-format). If `currency` doesn't render in your map, prepend a literal `"$"` instead.
  {% endhint %}

### **Styling vector tiles**

Because the data are streaming into Felt from a remote server, you first need to read in attribute values before you can [style layers](/layers/styling/vector-layers).

* Click the layer in the legend to open the [style editor](#the-style-editor)
* In the detail panel, choose a [visualization type](#choosing-your-map-type)
* If it is a categorical visualization

  * Use the **Color by** dropdown and choose the attribute you want to style by
  * For the **Showing** dropdown click **Add categories**
  * In the **Set Categories** panel, click **Add all** to pull in the attribute values in your current view

  <figure><img src="/files/80Qgbc2uPjfE3AdBKXmT" alt="" width="563"><figcaption></figcaption></figure>
* If it is a numeric visualization
  * Use the **Color by** or **Size by** dropdown to choose the attribute you want to style by
  * Click **Set steps** next to the Steps dropdown
  * Click **Set as range** to use values from the current view or manually enter a custom min and max **Range**

<figure><img src="/files/r0jImYF4GtCM9bSC2hFd" alt="" width="563"><figcaption></figcaption></figure>

#### Tips

* Attribute values are loaded from the data currently visible in your map view. Zoom or pan to see more, then click **Add all** again to expand the category list or **Set as range** to update the min/max.
* Because the data are streaming directly from a remote server, some classification methods, the data table, Components and Filters are unavailable.

## Frequently asked questions

<details>

<summary>How do I open the style editor?</summary>

Open a map in Edit mode and then click on any layer in your map legend to open the style editor. It will appear on the right-side.

</details>

<details>

<summary>Can I reset a layer to its original style?</summary>

Yes! Click on the layer's three-dot menu and select Actions > Reset styles to revert to the default styling.

</details>

<details>

<summary>What visualization types are available in Felt?</summary>

Felt offers several visualization types depending on your layer geometry:

* **Simple**: One color for all features (points, lines, polygons)
* **Categories**: Distinct colors for unique attribute values (points, lines, polygons)
* **Color range**: Gradient colors based on numeric values (points, lines, polygons)
* **Size range**: Scaled sizing based on numeric values (points, lines)
* **Heatmap**: Density visualization using color gradients (points only)
* **H3**: Hexagonal aggregation of point data (points only)

</details>

<details>

<summary>How many categories can I display in a categorical map?</summary>

Felt supports up to 256 unique categories in the legend.

</details>

<details>

<summary>What's the difference between Color range and Size range?</summary>

Color range applies color gradients based on numeric values, while Size range changes the physical size of points or line thickness based on numeric values. Both can help emphasize patterns in your data.

</details>

<details>

<summary>Can I do per-category styling in Felt?</summary>

Yes! Per-category styling is available for Categorical, non-continuous Color range, and non-continuous Size range visualization types. One example of this is setting different icons for various POI categories on a map.

To access specific styling for each class or category, click on the **All Points**, **All Lines**, or **All Polygons** menu when styling the appearance and drill down into the specific settings for that group of features.

<figure><img src="/files/C7y3HWcWoPvHKuaY2wDZ" alt="" width="375"><figcaption></figcaption></figure>

</details>

<details>

<summary>What is an H3 visualization? Does Felt support H3?</summary>

H3 visualizations group points into hexagons and can display point counts or aggregate numeric attributes (sum, average, max, or min). You can use fixed or dynamic resolution levels. Felt supports visualizing points as H3 hexagons as well as H3 geomatching (see [Spreadsheets](/upload-anything/spreadsheets#h3-geomatching)).

</details>

<details>

<summary>Can I fill polygons with a pattern like hatching or dots?</summary>

Yes! For polygon layers using the Simple visualization type, click **Fill** in the style editor and choose a pattern in the **Fill style** section: Hatch, Reverse hatch, Cross-hatch, Horizontal lines, Vertical lines, or Dots. The **Spacing** and **Thickness** sliders control the density and weight of the pattern, and it is drawn in the layer's fill color.

</details>

<details>

<summary>Can I use custom icons for my point data?</summary>

Yes! You can upload custom icons in formats like .png, .jpg, and .svg. Icons can be uploaded individually or in bulk, organized into themes, and shared across your workspace.

</details>

<details>

<summary>Where can I find icons to use?</summary>

You can choose from Felt's built-in icon library, use emojis, or upload your own custom icons.

</details>

<details>

<summary>How do I add labels to my map?</summary>

Select an attribute from the **Label by** dropdown in the style editor to turn labels on for a layer.

</details>

<details>

<summary>What label properties can I customize?</summary>

You can adjust:

* Size (small, medium, large)
* Color (RGB, hex, or HSL values)
* Halo color and width
* Weight (regular, medium, bold, italic)
* Case (uppercase/lowercase)
* Letter spacing and line spacing
* Max character length
* Placement and offset
* Padding

</details>

<details>

<summary>Can I format the numbers in my labels?</summary>

Yes. Labels use your column's [formatting](/layers/formatting) automatically, so setting a column to currency, percent, or a fixed number of decimals updates its labels to match. To combine several attributes into one label or split a label across lines, use a `text-field` [MapLibre style override](#customizing-labels).

</details>

<details>

<summary>How can I control visibility at different zoom levels?</summary>

Use the **Limit visibility** option ![](/files/JtfR08lpS3w6rTX1AsOP) to set a visible zoom range for features and labels.

</details>

<details>

<summary>Can I change styling properties at different zoom levels?</summary>

Yes! You can interpolate style properties like line thickness, opacity, and color between zoom levels, so features automatically adjust as users zoom in or out.

</details>

<details>

<summary>I just styled a layer, how can I get copy layer onto another map? How do I copy multiple layers at once?</summary>

You can copy layers between different maps with copy & paste. Copy a layer (Ctrl+C or Cmd+C), navigate to your new map, and paste it (Ctrl+V or Cmd+V). All styling, filters, popups, and legend configurations will be preserved.

To copy multiple layers at once: use the List view in Edit mode, hold Shift and click to select multiple layers, then right-click and choose Copy. Then paste them on your new map.

</details>

<details>

<summary>Are there advanced style controls I can access? Can I style a layer programmatically with Felt's REST API?</summary>

Yes, Felt's style editor is powered by Felt Style Language (FSL), which is a JSON-based specification that provides more control over styling through code. The advanced style editor in Felt's UI gives you access to Felt Style Language (FSL). To access the advanced style editor, click on a layer's **···** menu and select **Actions > Edit style language**.

See [Felt's developer docs](https://developers.felt.com/felt-style-language/getting-started) to learn more about Felt Style Language.

</details>

<details>

<summary>What are MapLibre style overrides? What can I do with MapLibre style overrides?</summary>

MapLibre overrides let you access advanced styling capabilities like icon rotation, drop shadows, offset geometry, and bivariate visualizations by adding `paintPropertyOverrides` to the FSL using the advanced style editor in Felt. These settings do not appear or reflect in the legend but are applied directly to the layer rendering.

</details>

<details>

<summary>How do I style vector tile layers?</summary>

Vector tiles stream data from remote servers, so you need to:

1. Open the style editor and choose a visualization type
2. For categorical styles: Select your attribute and click **Add all** to load values from your current view
3. For numeric styles: Choose your attribute and click **Set as range** to use values from your current view

</details>

<details>

<summary>What styling features are unavailable for vector tiles?</summary>

Because vector tile data streams from remote servers, some classification methods, the data table, Components, and Filters are not available.

</details>

<details>

<summary>How can I customize my legend?</summary>

In the Legend section of the style editor, you can add captions, adjust colors, and edit display names to make your legend more informative and visually cohesive.

</details>

<details>

<summary>Why aren't my popups working on polygons?</summary>

If a polygon doesn't have a fill, popup interactions only work when clicking on the stroke (outline), not in the interior area. Make sure your polygon has a fill if you want clickable popups throughout.

</details>


# Raster layers

Style satellite imagery & rasters with band combinations, hillshade effects & custom color ramps.

{% embed url="<https://www.youtube.com/watch?v=ZySJoTMYG_M>" %}

Raster data is often displayed as grayscale or color images. However, sometimes you want to style raster layers in different ways depending on the type of data.

## Choosing your map type

<figure><img src="/files/ikdiZMyAhUWKQTYohfjx" alt="" width="327"><figcaption></figcaption></figure>

### Image

The default style when you upload a raster data layer. Images will either be grayscale (for rasters with one or two bands) or colored (RGB) for rasters with three or more.

In an **Image** layer, the only styling property available is the opacity, which can be controlled via a slider or by inputting an exact percentage.

<figure><img src="/files/YhroY7rrGSGi4ZxWlEIO" alt="" width="563"><figcaption></figcaption></figure>

### Color range

A common use of raster data is to represent continuous measurements over an area, such as temperature or elevation. In these cases, a **Color range** style can be useful. Different Data Classification Methods can be used to apply colors to your data.

When using a **Continuous** classification method, the minimum and maximum data points will be set to three standard deviations from the mean. However, the range can be stretched by simply dragging the sliders under the histogram.

<figure><img src="/files/ShEvVnCfAjtGfDEo6k4O" alt="" width="563"><figcaption></figcaption></figure>

### Categories

This map type is useful for categorical data like geology, land use or crop type. Color palette metadata will be applied when available, although colors can always be manually selected.

Other styling options include controlling how colors are sorted in the legend or how many categories to show, whether all of them or only the most frequent ones.

<figure><img src="/files/4uekCxKGM2ba1IkRPALf" alt="" width="563"><figcaption></figcaption></figure>

### Hillshade

A **Hillshade** style can be used to represent elevation variations in a Digital Elevation Model. Coupled with a color range, it’s a great way of showing both absolute *and* relative elevation.

Both the angle of the light source (in [azimuth](https://en.wikipedia.org/wiki/Azimuth)) and the intensity of the hillshade are configurable.

<figure><img src="/files/T5jwSAlGLSDoww4qnw8a" alt="" width="563"><figcaption></figcaption></figure>

### Raster Algebra

Some [raster algebra](https://en.wikipedia.org/wiki/Map_algebra) metrics are available as presets for multi-band raster data:

<table data-header-hidden><thead><tr><th></th><th></th><th width="385"></th><th></th></tr></thead><tbody><tr><td><strong>Name</strong></td><td><strong>Acronym</strong></td><td><strong>Target</strong></td><td><strong>Bands</strong></td></tr><tr><td>Normalized Difference Vegetation Index</td><td>NDVI</td><td>Health and density of vegetation</td><td>Red and near infrared (NIR)</td></tr><tr><td>Normalized Difference Water Index</td><td>NDWI</td><td>Water bodies</td><td>Green and near infrared (NIR)</td></tr><tr><td>Normalized Difference Moisture Index</td><td>NDMI</td><td>Water content in vegetation</td><td>Near infrared (NIR) and short-wave infrared (SWIR)</td></tr></tbody></table>

<figure><img src="/files/i0cNvcdN3Cz53XjJSxJL" alt="" width="563"><figcaption></figcaption></figure>


# Formatting

Format attribute values for improved map readability.

{% embed url="<https://www.youtube.com/watch?v=5gzSrTq45vA>" %}

Whether you format a numeric field from the [table view](/layers/table-view), with [interactions](/layers/popup-interactions), or with a [component](/dashboards-and-apps/components), your formatting choices are automatically synchronized across all three locations ensuring consistent data presentation throughout your map. This unified formatting approach not only makes it easier to view and understand your data, but also gives your final map with components or interactions a polished, professional appearance.

Map [labels](/layers/styling/vector-layers#labelling) use this same formatting too. A value shown as `$1,234,567` in the table appears the same way when you use that column as a label, with no extra setup.

## Format options

<figure><img src="/files/tTBUbChKYeICr59mUOZb" alt=""><figcaption></figcaption></figure>

Number, percent, and custom formats provide different ways to display your numeric data

* **Number**: Displays values as standard numbers (e.g., 1234.56)
* **Percent**: Converts values to percentages and adds the % symbol (e.g., 12.3%)
* **Custom**: Allows for specialized formatting using numbro.js

Further customize with

* **Decimal places**: Controls how many digits appear after the decimal point
* **Units**: Add prefix or suffix text to your numbers (e.g., $100 or 50 km)
* **Thousand separators**: Inserts commas between thousands for improved readability (e.g., 34,500)
* **Round Large Values**: Simplifies large numbers into abbreviated forms (e.g., 1.2M)

The **Preview** section of the modal updates to show how the formatted numbers will look as you make your selections.

### Format from table view

* Click on a column name and choose the option to **Format...**

<figure><img src="/files/KORE7c2PVwIUNH41PNiz" alt="" width="321"><figcaption></figcaption></figure>

### Format from popup

* Click **123** when hovering over a numeric attribute in the Popup content panel

<figure><img src="/files/hpzPQDt70Zdu2coiuscT" alt="" width="285"><figcaption></figcaption></figure>

### **Format from component**

* Select an option from **Format** in the component configuration panel

<figure><img src="/files/77FxUTmuwaEbUOEXZjwS" alt="" width="280"><figcaption></figcaption></figure>

## Custom formatting

Felt uses [numbro.js](https://numbrojs.com/index.html) to enable custom formatting of numeric attributes.

* From the Format dropdown choose Custom

<figure><img src="/files/cikoAAJ1Aiy1MYo0X1it" alt="" width="375"><figcaption></figcaption></figure>

* Enter your custom numbro.js formatting

<figure><img src="/files/U0qlCVEvR4aA0mtJgrVT" alt="" width="375"><figcaption></figcaption></figure>

Refer to the examples below to get started with custom formatting. For a more detailed overview of options, visit their [documentation](https://numbrojs.com/format.html) and [code examples](https://github.com/BenjaminVanRyseghem/numbro/blob/master/src/validating.js).

### Numbers

| Input Value | Format                                                                  | Output Display |
| ----------- | ----------------------------------------------------------------------- | -------------- |
| 10000       | { "thousandSeparated": true, "mantissa": 4 }                            | 10,000.0000    |
| 10000.23    | { "thousandSeparated": true }                                           | 10,000.23      |
| 10000.23    | { "thousandSeparated": true, "forceSign": true }                        | +10,000.23     |
| -10000      | { "thousandSeparated": true, "mantissa": 1 }                            | -10,000.0      |
| 10000.1234  | { "mantissa": 3 }                                                       | 10000.123      |
| 10000.1234  | { "optionalMantissa": true, "mantissa": 5 }                             | 10000.12340    |
| 1.23        | { "trimMantissa": true, "mantissa": 4 }                                 | 1.23           |
| 1.234       | { "trimMantissa": true, "mantissa": 4 }                                 | 1.234          |
| 1.2345      | { "trimMantissa": true, "mantissa": 4 }                                 | 1.2345         |
| 1.23456     | { "trimMantissa": true, "mantissa": 4 }                                 | 1.2346         |
| -10000      | { "thousandSeparated": true, "negative": "parenthesis", "mantissa": 4 } | (10,000.0000)  |
| -0.23       | { "mantissa": 2 }                                                       | -0.23          |
| -0.23       | { "negative": "parenthesis", "mantissa": 2 }                            | (0.23)         |
| 0.23        | { "mantissa": 5 }                                                       | 0.23000        |
| 1230974     | { "average": true, "mantissa": 1}                                       | 1.2m           |
| 1460        | { "spaceSeparated": true, "average": true }                             | 1 k            |
| 1           | { "output": "ordinal" }                                                 | 1st            |
| 23          | { "output": "ordinal" }                                                 | 23rd           |
| 52          | { "output": "ordinal" }                                                 | 52nd           |
| 100         | { "output": "ordinal" }                                                 | 100th          |

### Average

numbro provides an easy mechanism to round up any number with the key **average**

| Input Value | Format                                     | Output Display |
| ----------- | ------------------------------------------ | -------------- |
| 123         | { "average": true }                        | 123            |
| 1234        | { "average": true }                        | 1k             |
| 12345       | { "average": true }                        | 12k            |
| 123456      | { "average": true }                        | 123k           |
| 1234567     | { "average": true }                        | 1m             |
| 12345678    | { "average": true }                        | 12m            |
| 123456789   | { "average": true }                        | 123m           |
| 1b          | { "average": true, "lowPrecision": false } | 580m           |

In addition to this, when numbers are rounded up, one can specify the precision wanted with the key **totalLength**.

| Input Value | Format                                 | Output Display |
| ----------- | -------------------------------------- | -------------- |
| 1234567891  | { "average": true }                    | 1b             |
| 1234567891  | { "average": true, "totalLength": 1 }  | 1b             |
| 1234567891  | { "average": true, "totalLength": 2 }  | 1.2b           |
| 1234567891  | { "average": true, "totalLength": 3 }  | 1.23b          |
| 1234567891  | { "average": true, "totalLength": 4 }  | 1.235b         |
| 1234567891  | { "average": true, "totalLength": 5 }  | 1.2346b        |
| 1234567891  | { "average": true, "totalLength": 6 }  | 1.23457b       |
| 1234567891  | { "average": true, "totalLength": 7 }  | 1.234568b      |
| 1234567891  | { "average": true, "totalLength": 8 }  | 1.2345679b     |
| 1234567891  | { "average": true, "totalLength": 9 }  | 1.23456789b    |
| 1234567891  | { "average": true, "totalLength": 10 } | 1.234567891b   |

### Percentages

| Input Value | Format                                                                                    | Output Display |
| ----------- | ----------------------------------------------------------------------------------------- | -------------- |
| 1           | { "output": "percent" }                                                                   | 100%           |
| 0.974878234 | { "output": "percent", "mantissa": 4 }                                                    | 97.4878%       |
| -0.43       | { "output": "percent", "spaceSeparated": true }                                           | -43 %          |
| 0.43        | { "output": "percent", "mantissa": 3, "negative": "parenthesis", "spaceSeparated": true } | 43.000 %       |

### Time

| Input Value | Format               | Output Display |
| ----------- | -------------------- | -------------- |
| 25          | { "output": "time" } | 0:00:25        |
| 238         | { "output": "time" } | 0:03:58        |
| 63846       | { "output": "time" } | 17:44:06       |

### Bytes

| Input Value   | Format                                                                        | Output Display |
| ------------- | ----------------------------------------------------------------------------- | -------------- |
| 100           | { "output": "byte", "base": "binary" }                                        | 100B           |
| 2048          | { "output": "byte", "base": "binary", "spaceSeparated": true }                | 2 KiB          |
| 7884486213    | { "output": "byte", "base": "binary", "mantissa": 1 }                         | 7.3GiB         |
| 3467479682787 | { "output": "byte", "base": "binary", "mantissa": 3, "spaceSeparated": true } | 3.154 TiB      |


# Popup interactions

Add hover effects, popups, and clickable features to create engaging interactive maps.

<figure><img src="/files/iIyM2hchikTmNHoWj9w3" alt="" width="563"><figcaption></figcaption></figure>

Popups provide a way to display a layer’s attributes on click or hover. Popup interactions are enabled by default for vector layers and disabled by default for raster layers. There are three types of popups for vector data: **Standard**, **URL**, and **Custom HTML**. You can control and customize the popup behavior using the **Popup** section of a layer’s style editor.

## Standard popups

{% embed url="<https://www.youtube.com/watch?v=pt191lOVt7A>" %}

#### Configure standard popups

1. In edit mode, open the style editor for the layer
2. Scroll to the bottom of the style editor to the **Popup** section

   <figure><img src="/files/JvC34c0lklDkoRvzEdeU" alt="" width="309"><figcaption></figcaption></figure>
3. Click on the dropdown next to **Contents** to customize the layout and contents. Add a title, configure an image, and reorder, remove and format attributes. See [#content-settings](#content-settings "mention")for more info.

<figure><img src="/files/VrnyT7npEv1BsSvEEL21" alt="" width="563"><figcaption></figcaption></figure>

{% hint style="info" %}
Popups update in real time! Click on a feature to see changes as you make them.
{% endhint %}

#### Layouts

Felt provides two display options for the standard popup type: Table and List.

* Table layout is more compact and has keys and values displayed on the same row
* List layout is less compact and has keys and values ordered in a list format

{% columns %}
{% column %}

<p align="center"><strong>Table</strong></p>

<figure><img src="/files/mxUqFghtgJiCEzEnOVaq" alt="" width="477"><figcaption></figcaption></figure>
{% endcolumn %}

{% column %}

<p align="center"><strong>List</strong></p>

<figure><img src="/files/ZLTpzdysKsa9faXC8pxX" alt="" width="470"><figcaption></figcaption></figure>
{% endcolumn %}
{% endcolumns %}

#### Content Settings

Within the **Contents** settings, you can control what appears in the popup menus:

* Choose a layout
* Add, remove, and reorder attributes
* Select a popup **Title** attribute
* Add an image in the header (the image must be a public image URL or an [Image](/layers/editing-layers#supported-attribute-types) attribute)
* Edit attribute names *(double-click on the attribute name)*
* Format the values *(click **123** when hovering over an attribute)*

## Custom HTML (with AI)

{% hint style="success" %}
This feature is only available to customers on the [Enterprise plan](https://felt.com/pricing). To upgrade, [contact Sales](https://felt.com/sales).
{% endhint %}

Custom HTML popups let you fully customize the contents and layout of layer interactions. Describe what you want and Felt AI generates the HTML (Liquid), CSS, and JavaScript — which you can edit and extend directly — or write your own from scratch. Popups can include photos, interactive charts, dropdowns, and more.

To get started, set **Type** to **Custom HTML** in the **Popup** section of the layer's style editor. See [Custom popups](/developer-platform/custom-popups) for the full guide: creating a popup, prompt examples, and writing your own with Liquid.

## URL popups

Use URL popups to load and display external websites in an iframe inside Felt when clicking or hovering on features in layers. URL popups can use attributes in your data to point to feature-specific URLs. You can also add URL-related attributes from your data by clicking the **plus** button in the editor and select the URL attribute.

<figure><img src="/files/Ubw0hpl7uVCFmQLowY5E" alt="" width="563"><figcaption></figcaption></figure>

{% hint style="success" %}
This feature is only available to customers on the [Enterprise plan](https://felt.com/pricing). To upgrade, [contact Sales](https://felt.com/sales).
{% endhint %}

#### Configure URL popups

1. From the **Popup** section of a layer’s style editor, set **Type** to **URL**
2. The popup configuration dialog will open

   <figure><img src="/files/dyUhJEuviVY3D4IwTOQQ" alt=""><figcaption></figcaption></figure>

   1. **the left side:** iframe builder (add attributes from the data with the **plus** sign)
   2. **the center:** previews (desktop & mobile available)
   3. **the right side:** layout controls (see [#layout-options](#layout-options "mention"))
3. Configure your iframe URL from static text and/or attributes. See [#examples](#examples "mention") below.
   1. To add an attribute to the URL, click on the plus sign at the top of the builder and select the attribute to include in the iframe URL. Attributes have double curly brackets surrounding them.

      <figure><img src="/files/G0m11unt5AMh8QiGc4RC" alt="" width="563"><figcaption></figcaption></figure>
4. Review the URL and preview the popups in both Desktop and Mobile modes.
5. Click **Save** (top right) once you are finished editing the popup
6. Test the popup experience by clicking on a feature in your map

{% hint style="info" %}
All edits and changes are applied immediately to your previews, saved changes are applied immediately to the live map.

You can always return to the configuration settings by clicking on **Edit...** in the **Content** row.
{% endhint %}

#### Examples

iframe URLs can be created from static text, a URL attribute in the data, or a mix of static text and data attributes.

**Static URLs**

Load a static URL into the builder to load the same website for all feature in the layer

<figure><img src="/files/hhcCfbEuNBcZWxJ4RtoU" alt="" width="563"><figcaption></figcaption></figure>

**URL attribute**

Point to attribute URLs in the data so different features show their associated URLs. Attributes will have double curly brackets surrounding the attribute name in the builder to indicate dynamic data.

<figure><img src="/files/vFub2nUdcEIDdZ9i5tNk" alt="" width="563"><figcaption></figcaption></figure>

**Mix of static and dynamic attributes**

In this example an attribute is used as part of a URL to load different content on a website per feature popup. The **Unique Squirrel ID** attribute is used to point each feature to a different URL. Attributes will have double curly brackets surrounding the attribute name in the builder to indicate dynamic data.

<figure><img src="/files/SHj41zWDkp3eE7NhrAaZ" alt="" width="563"><figcaption></figcaption></figure>

#### Troubleshooting iframes that won’t load

When a URL won’t load within an iframe but loads normally otherwise, it is likely because the website’s response headers prevent the website from being embedded. To resolve the issue, add a [Content-Security Policy response header](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy) to the embedded website.

## Layout options

{% hint style="success" %}
This feature is only available for Custom HTML and URL popups on the [Enterprise plan](https://felt.com/pricing). To upgrade, [contact Sales](https://felt.com/sales).
{% endhint %}

Use the **Layout** control inside the setup modal to control where the popup is shown: popup card, left sidebar, right sidebar, or popup modal.

<figure><img src="/files/TXcWJD7rDB8hLCG5tlHy" alt="" width="291"><figcaption></figcaption></figure>

You can provide an attribute to use as the title with the **Title** field and specify the width and height of the interaction’s container via the **Width** and **Height** input fields.

Use the **Header** setting to control the visibility of the top-bar.

* **Standard** headers show the layer name, the Title, and overflow menu

<figure><img src="/files/v7zeXqRGgmQjcAqQYvEo" alt="" width="563"><figcaption></figcaption></figure>

* **Compact** headers show the overflow menu

<figure><img src="/files/NEIQeWjY6Tir0xhBoPpl" alt="" width="563"><figcaption></figcaption></figure>

* **None** removes any header option from the popup

<figure><img src="/files/BJLkmdDRiUjiMH3QNTDj" alt="" width="563"><figcaption></figcaption></figure>

Custom HTML and URL popup content can be shown in four different layouts: Popup, Modal, Right sidebar, or Left sidebar.

<figure><img src="/files/0fjROdzw32CqLkIpPLms" alt=""><figcaption><p>Clockwise from top left: popup, modal, right sidebar, left sidebar</p></figcaption></figure>

## Raster interactions

Raster layers have interactions disabled by default. To show raster pixel values on hover or click, click the dropdown next to the **Show** control within the **Popup** section of your raster layer's style editor.

<figure><img src="/files/iznVYPUI1RGRco1Zzgr8" alt="" width="375"><figcaption></figcaption></figure>

<figure><img src="/files/Ei9fjFyzvekUn4ZOgFWk" alt="" width="375"><figcaption></figcaption></figure>

## Interaction behavior

Interactions can be shown on click, only when clicking on labels, or on both hover and click. Configure when interactions are shown using the **Show** control from within the **Popup** section of the layer style editor.

Looking to turn off interactions on a layer? Click the **On click** dropdown next to **Show** and select **Never**.

<figure><img src="/files/nyuKezfZcjFiDKE4QPa5" alt=""><figcaption></figcaption></figure>

When clicking on area with overlapping interactive features, arrows are provided to step between features.

<figure><img src="/files/8UG0AE0DEaSfZ3wSCcmO" alt="" width="364"><figcaption></figcaption></figure>


# List

View, reorder, and toggle visibility of map layers to maintain an organized mapping project.

<figure><img src="/files/l9aCYtk2sO7Q5xpFjJwd" alt="" width="320"><figcaption></figcaption></figure>

Felt offers two different views for managing map content:

* **List** view: Shows all layers and annotations in your map. This is your workspace as a map editor, where you make changes and customizations.
* **Legend** view: Shows what viewers will see when looking at your shared or embedded map.

The [List view](/getting-started/tour-the-interface) shows every object on your map: all [annotations](/annotations/annotations), [layers](/layers/table-view), as well as the map's [basemap](/layers/basemaps).

### Toggling the List view

The List view is accessible when editing a map. You can open it in two ways:

* Clicking the **List** tab in the left sidebar
* Using the **Shift+2** keyboard shortcut

### Ordering objects in the list

The order of objects in the List reflects their position in the map. You can reorder objects by dragging and dropping them, via the Arrange menu when right-clicking on an annotation or layer, or via the keyboard shortcuts **\[** , **]**, **Shift+\[**, and **Shift+]**.

{% embed url="<https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmRfGitkyjOEMvVsEyGWN%2Fuploads%2Fxn2g9T25GxPqZXipmCS0%2Fobject_list.mp4?alt=media&token=9a07903d-d6a9-4c97-8d26-40e87160e67f>" %}

To ensure maps look great by default, Felt always draws annotations on top of layers on the map. Among layers, regardless of List order, point layers are drawn on top of line layers, which are always drawn on top of polygon and raster layers.

### Collapsing list sections

You can collapse the **Annotations** or **Layers** sections in the List by clicking on the chevron next to them.

<figure><img src="/files/yV5rBLAP1f29MxPKeFuB" alt="" width="321"><figcaption></figcaption></figure>


# Group

Group related map layers for better organization.

{% embed url="<https://www.youtube.com/watch?v=xHPT3fWFY7U>" %}

Felt's layer grouping feature allows you to organize related layers together, making your maps more structured and easier to navigate. Learn how to create and manage layer groups, and control which layers appear in your legend.

### Creating layer groups

To organize related layers into a group:

* From the [List](/layers/list) view select the layers (holding **Ctrl/Cmd**) you want to add to a group
* Group the selected layers by right clicking and choosing the option to **`Group` > `Group selection`**
* Give your new group a descriptive name

When your layers are in a group, you can also add a [Layer slider](/dashboards-and-apps/layer-slider).

### Adding captions to layers and groups

Enhance your legend with descriptive captions:

* Select a layer or group in the List view
* Find the **Legend** section in the style editor
* Enter your descriptive text in **Caption**
* The caption will appear below the layer or group name in the legend

### Reorganizing layers and groups

You can move layers between groups or change their order:

* In the List view, drag and drop layers to reorder them within groups
* To move a layer to a different group, select it and drag and drop it into the desired group or right click to move it.


# Refreshing data

Keep maps up-to-date by automatically refreshing data sources and connections.

{% embed url="<https://www.youtube.com/watch?v=MiHiVNnJLkk>" %}

Keep your maps current with Felt's dynamic data updating options. Whether you've uploaded files, connected via URL, or integrated with cloud data sources, you can refresh your layers to reflect the latest information while preserving your styling and configuration. Set up automated refreshes for live data sources or manually update when needed to ensure your spatial visualizations always represent the most current data.

## Maintaining styling when refreshing

When refreshing data, Felt preserves your layer styling, filters, and components automatically. Follow these guidelines to ensure smooth updates:

**Maintain column consistency**

* Avoid renaming columns that are used in styling, filters, or components
* Felt uses column headers to maintain styling when you upload new versions
* You can add new columns without affecting existing visualizations

**When columns change**

If a column used in styling is renamed or removed, Felt detects this and gives you options to maintain your map:

<figure><img src="/files/XHglhro8MF9KZJ9eD1L2" alt="" width="563"><figcaption><p>Felt prompts you to select a new attribute when a styled column is no longer available</p></figcaption></figure>

You can:

* Select a new attribute from the dropdown to maintain consistent styling
* Remove the missing attribute to clear your styling
* Discard the data update if you need to fix your data first

This graceful handling ensures you never lose your carefully configured map styling due to data changes.

## URL connected layers

* Select the layer you want to refresh from the [legend](/getting-started/tour-the-interface#legend)
* Go to the Data tab in the [detail panel](/getting-started/tour-the-interface#detail-panel)
* Click the **Refresh** button at the bottom left
* Wait for the processing to complete (you'll see a loading indicator)
* Your map will update automatically with the new data

{% hint style="info" %}
**Tip**: When adding a spreadsheet from URL, toggle on the **Live** option so it stays in sync with updates for a quick and easy database powered map.
{% endhint %}

## File uploaded layers

* Download the updated file to your computer
* In Felt, select the layer you want to update from the [legend](/getting-started/tour-the-interface#legend)
* Go to the Data tab in the [detail panel](/getting-started/tour-the-interface#detail-panel)
* Click the option to **Upload new version** at the bottom left
* Select your updated file
* Wait for the processing to complete
* Your map will display the refreshed data

## Configuring live layers

Once you’ve added a layer to your map you can set the refresh cadence in the Data tab in the [detail panel](/getting-started/tour-the-interface#detail-panel):

* For on-demand updates: click on the **Refresh** button at the bottom of the data menu
* For automatic updates: turn the **Live** toggle ON and select a cadence from the dropdown

{% hint style="info" %}
**Tip:** You can always find the source URL for a live layer in the Data tab.
{% endhint %}

<div align="center"><figure><img src="/files/zkpXvNy9NCAoxt3Ao7eh" alt="" width="295"><figcaption></figcaption></figure></div>

## Refreshing a cloud source

Felt requests updated datasets from your database every 24 hours and refreshes the list of datasets available for Felt. For example: if a dataset is added to the database, you will see that dataset available in Felt after a cloud source refresh.

You can refresh all the data from your source on demand by clicking on the **Sync source** option at the top of the source in **Data sources**:

<div align="left"><figure><img src="/files/fSCZZWCJSu53fKhbKe7t" alt=""><figcaption></figcaption></figure></div>

Note: the cloud source refresh does not refresh any data layer on maps, and does not consume any data processing. See [Cloud sources](/data-sources/cloud-sources#syncing-behaviors) for the full set of sync behaviors.


# Spatial analysis

Analyze layers with Felt's spatial analysis tools.

{% embed url="<https://www.youtube.com/watch?v=MudknS9d-y0>" %}

Manipulate and analyze geographic data to extract meaningful insights. Combine layers, identify patterns, and discover spatial relationships to make informed decisions.

## Using spatial analysis

To perform analysis on layers, click on the ![](/files/Fyd9uldsRFuFDMCAtwkN) **Analysis** tool in the toolbar, or use the **Command/Control + K** keyboard shortcut and type **Analysis** or the name of any specific analysis, like **Buffer**.

## Available methods

{% hint style="warning" %}
Processing large layers could take time. Consider clipping large layers to your area of interest before running other operations.
{% endhint %}

| Name             | Description                                                                           | Example use case                                                                                        | Input                     | Output                                              |
| ---------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- | ------------------------- | --------------------------------------------------- |
| **Buffer**       | For each feature, generate a polygon covering an area within a distance               | To identify specific locations that are within a certain radius of features like roads, hospitals, etc. | Any                       | Polygons                                            |
| **Bounds**       | For each feature, generate a rectangular polygon completely covering the feature      | To simplify features to broad coverage areas                                                            | Any                       | Polygons                                            |
| **Centroid**     | For each feature, generate a point at the center of it                                | To simplify a polygon layer to a point layer, like metro areas to just cities                           | Lines or polygons         | Points                                              |
| **Clip**         | Keep only the parts of each feature inside polygons from another layer                | To reduce a global or countrywide layer to just an area of interest                                     | Any and polygons          | Any (same as input)                                 |
| **Count Points** | Add the total number of points covered by each polygon to each feature                | Count the number of airports in each US state                                                           | Points and polygon layers | Polygon layer with number of points as an attribute |
| **Dissolve**     | Create a single new polygon covering all features                                     | To simplify overlapping or contiguous polygons, like buffers                                            | Polygons                  | Polygons                                            |
| **Intersect**    | Keep only the features in layer A that intersect layer B                              | To identify features that overlap another layer, like roads inside national parks                       | Any and polygons          | Any (same as input)                                 |
| **Subtract**     | Keep only the parts of each feature outside the polygons from another layer           | Remove flood zones from candidate areas for development projects                                        | Any and polygons          | Any (same as input)                                 |
| **Join**         | For each feature, generate a new one that includes the columns from both input layers | To add non-geographic data to a geographic layer, like GDP per year to a countries layer                | Any and any               | Any (same as input)                                 |

{% hint style="info" %}
When using the Join tool always choose the layer with the target output geometry as the first layer in the dropdown menus of the analysis tool. When working with a non-spatial (tabular) layer, make sure to configure that table as the *second layer* in the menu.
{% endhint %}

## Spatial analysis exercise

Try out Felt’s spatial analysis tools for yourself in this step-by-step tutorial to find suitable habitat for the Iberian Lynx!

Download the datasets: <https://drive.google.com/drive/folders/1eKmVEg1hZk8TlVnQPu150oaTQNu07YkX>

{% embed url="<https://www.youtube.com/watch?v=97NX-lqZjtU>" %}


# Dashboard components

Build interactive dashboards with layer components.

<figure><img src="/files/guJ12ckMgLjJft8iyAe3" alt=""><figcaption></figcaption></figure>

Components can be added to layers to quickly create interactive and informative dashboards. Each component serves a specific purpose, providing unique insights and facilitating data analysis and exploration. By combining these components together, you can explore, compare, and interpret complex datasets with ease to make informed decisions.

## Adding components

There are two ways to add components to a layer:

* Directly from the Dashboards tool (![](/files/CDlyZcdpKQYu0AUdTU3p)) in the [toolbar](/getting-started/tour-the-interface)

<figure><img src="/files/RcBGKqYfMcSsl6GLH50Y" alt="" width="563"><figcaption></figcaption></figure>

* Or from the Components tab in the [detail panel](/getting-started/tour-the-interface#detail-panel)

<figure><img src="/files/J8tgk5ngdMZztmvP5gpP" alt="" width="563"><figcaption></figcaption></figure>

## Available components

### Statistic

Summarize numeric values into useful statistics to quickly understand essential metrics in your data. With the Statistic component you can show the count of features (Feature count) or summarize a numeric attribute with different stats: Sum, Average, Min, Max, Median, or Distinct Count.

<figure><img src="/files/9SByohM80STFJWUIKmDA" alt="" width="305"><figcaption></figcaption></figure>

**Good for**

* Providing quick insights into key metrics like averages, totals, and min or max values.
* Gaining a high-level overview of important numerical data.
* Presenting summarized data for easy interpretation.
* Show the total sales revenue for a quarter.

**Example use case:** Display the average income of residents in a city.

<figure><img src="/files/V3e0GD9rnDDHDyY5TxfN" alt="" width="244"><figcaption></figcaption></figure>

### Bar chart

Visualize and compare categories with bar charts to compare differences and trends between various groups in your data. You can calculate statistics (Feature Count, Sum, Average, Min, Max, Median, and Distinct Count) for each category based on a numeric attribute in the table. Summarizing a numeric attribute in the Bar chart is especially useful to summarize a secondary statistic on various categories.

<figure><img src="/files/6lYxpccqmygbMiD5Kgli" alt="" width="305"><figcaption></figcaption></figure>

**Good for**

* Comparing different categories or groups.
* Highlighting differences and trends between multiple datasets.
* Visualize the number of users in different age groups.

**Example use case:** Compare the sales revenue for different sales territories.

Summarizing a numeric attribute in the Bar chart is especially useful to summarize a secondary statistic on various categories.

<figure><img src="/files/cGdjUtMpe2SkcGvESMqO" alt="" width="251"><figcaption></figcaption></figure>

### Histogram

Quickly chart patterns and trends by displaying frequency distributions or X,Y charts using easy-to-read bins. By default, distribution of data is shown across 50 bins. You can adjust this number in the Bins option.

<figure><img src="/files/hqKjJS8pnyKIyNoFrJsR" alt="" width="305"><figcaption></figcaption></figure>

**Good for**

* Understanding distribution and variability.
* Spotting outliers and central tendencies.
* Analyzing the spread of data points.
* Visualize the elevation distribution within a geographic region.

**Example use case:** Show the distribution of ages in demographic data.

<figure><img src="/files/91iTIxq6K9tIKMQHldkN" alt="" width="253"><figcaption></figcaption></figure>

### Filter

Drill down, filter on-the-fly, and select more specific categories or ranges of data to focus on target information. There are two types of filter components: Dropdown and Slider. The Dropdown filters can be configured with multi-select or single-select. While all attributes are filterable with a dropdown, only numeric attributes can be filtered with a slider.

<figure><img src="/files/z3zvQhB94AMPszvMFSOT" alt="" width="305"><figcaption></figcaption></figure>

**Good for**

* Focusing on particular values for more precise insights.
* Select distinct land use types to explore changes in a city.

**Example use case:** Filter sales data by revenue ranges to see performance in sales regions.

There are two types of filter components: Dropdown and Slider. All attributes are filterable with a dropdown. Only numeric attributes can be filtered with a slider.

{% columns %}
{% column %}
**Dropdown**

<figure><img src="/files/sTgaz3RdL97tza19fpR7" alt=""><figcaption></figcaption></figure>
{% endcolumn %}

{% column %}
**Slider**

<figure><img src="/files/3LmofUzK9pgLyoWXmOEU" alt=""><figcaption></figcaption></figure>
{% endcolumn %}
{% endcolumns %}

#### How filter input types are determined

For number column types you can configure the filter as a slider or a dropdown. When configuring a dropdown for numbers, the dropdown's style depends on the number of unique values in the layer:

* **<100 unique values**: displays as a dropdown with checkboxes

  <figure><img src="/files/rvOW9eC6xRInuz9kurhv" alt="" width="323"><figcaption></figcaption></figure>
* **100+ unique values**: displays as a text input field

  <figure><img src="/files/L40dm2TPjl4Q56RkZqgp" alt="" width="321"><figcaption></figcaption></figure>

Tip: if you need a checkbox dropdown for a numeric column with 100+ unique values, convert the column to a string/text type in your source file and upload the dataset again.

### Time series

Explore spatial trends over time and reveal key metrics across time periods. With the Time series component, you can select between multiple time-based intervals to best summarize your data. Time intervals include: Year, Month, Week, Day, and Hour.

<figure><img src="/files/wAs8xhRX2rQeHNfmKoHn" alt="" width="305"><figcaption></figcaption></figure>

**Good for**

* Identifying trends and patterns over time.
* Tracking the evolution of data.
* Understanding how different variables interact across time.
* Monitor traffic flow changes during different times of the day.

**Example use case:** Display temperature changes over a year across various cities.

<figure><img src="/files/rA8t6FSpqh5EBUSyZtnf" alt="" width="252"><figcaption></figcaption></figure>

#### Required formats

* **Native Date and Datetime Types**: Felt automatically recognizes files with native date and datetime support, such as GeoPackage and Shapefile.
* **String Types**: If not a file type with native support, in order to recognize, the date or datetime strings should be in the following formats:
  * `1970-01-01` – ISO 8601
  * `1970/01/01` – common, unambiguous
  * `1970-01-01T00:00:00` – ISO 8601
  * `1970-01-01T00:00:00.00` – ISO 8601 with milliseconds
  * `1970-01-01T00:00:00Z` – ISO 8601 with UTC offset
  * `1970-01-01 00:00:00` – common, unambiguous
  * `1970/01/01 00:00:00` – common, unambiguous

#### Unsupported features

* **Timezone Offsets**: Felt does not support timezone offsets at this time.

#### **Intervals**

* The time series component gives the following maximum intervals for meaningful breaks
  * Days: 365 (1 year)
  * Hours: 168 (1 week)
  * Weeks: 260 (5 years)
  * Months: 120 (10 years)
  * Years: 200

## Update behavior

Components can update when a viewer zooms around the map and/or based on filters applied when other components are applied. Within the configuration panel for the Statistic, Bar chart, Histogram and Time series components you can control how metrics update dynamically on the map.

<figure><img src="/files/o60McgpI4jIgJtBfIrLa" alt="" width="284"><figcaption></figcaption></figure>

#### **Update based on view**

By default, components reflect all data visible on the map, not only the data that’s currently within a user’s view. Enable this setting to update a component as the map is moved.

#### **Update based on other filters**

By default, components update when other component filters are applied. Disable this setting to keep a component unaffected by other component filters.

## Formatting

To format how numeric metrics are displayed in the Dashboard components, click on the **Default** dropdown to open the format menu for that component's metric.

<figure><img src="/files/aCFVa7kE1gZTStxM6lB3" alt="" width="254"><figcaption></figcaption></figure>

In this menu you have control over the display of numeric metric, including: how many decimal places are displayed, prefix / suffix units, add numeric formatting, apply rounding logic. These metrics can be converted into percentages or custom format. See [Formatting](/layers/formatting) for more information.

<figure><img src="/files/MxIO1Wg77xZQNr2Q0qR2" alt="" width="375"><figcaption></figcaption></figure>


# Layer slider

Compare map layers with sliders.

{% embed url="<https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmRfGitkyjOEMvVsEyGWN%2Fuploads%2F2MvdMNwrp2IjghhNLFUe%2FScreen_Recording_2024-08-14_at_11.56.54_AM.mp4?alt=media&token=9d810ffe-7f74-45f8-87fd-b61aa1a7288d>" %}

Layer Sliders enable you to slide through raster or vector map layers to spot changes, trends, and patterns more intuitively.

## Adding a Layer Slider

A Layer Slider can be added to any layer group of **vector or raster data** by toggling on **Slider** in the layer group’s Legend options. The legend updates to a slider that moves through each layer in the group according to how they are ordered.

<figure><img src="/files/pNg2a0e6KBNYDoFr8N3f" alt="" width="315"><figcaption></figcaption></figure>

{% hint style="info" %}
Using Table view with a slider? The table automatically updates to show the current layer when switching between layers in the slider.
{% endhint %}


# Map settings

Customize map appearance and settings for interactive dashboards.

<figure><img src="/files/ntb3jcOYEm77emVXuDZ2" alt="" width="375"><figcaption></figcaption></figure>

You can access your map's settings from the![](/files/3O2sCfZkqCMak4bWIkKe)icon in the toolbar. The **Map settings** panel allows you to customize your map's behavior and control how viewers interact with your data.

### **Description**

Add a detailed description to provide context about a map. This description appears at the top of the legend.

### **Map constraints**

Focus your map on the most relevant area for your viewers or collaborators. Set a boundary for the map, and optionally limit the zoom range at which the map is viewable.

### **Viewer permissions**

Define what actions viewers can take:

* **Duplicate map and data**: Use this setting to allow public viewers or viewers belonging to a separate Felt workspace to copy the map over to their workspace. (Note: these viewers need to have Edit access in the other workspace to duplicate).
* **See map presence**: Set if live editor avatars should appear to map viewers in the top bar.
* **View data table**: Manage whether map viewers can view layer data tables. When enabled, data tables are accessible to viewers via the ••• buttons in the legend.
* **Export data**: Manage whether map viewers can download layers on the map. Available to customers on the [Enterprise plan](https://felt.com/pricing).


# Extensions

Turn any map into an interactive application — build custom extensions with AI or add pre-built tools in a few clicks.

{% embed url="<https://youtu.be/0bB6JY-3SCc>" %}

Extensions let you add interactivity to your Felt map, whether that means enabling viewers to search, measure, or filter your data with pre-built tools like [Find](#find), [Measure](#measure), and [Spatial filter](#spatial-filter), or creating a complete application with [Custom extensions](#create-a-custom-extension-with-felt-ai). With extensions, you can transform your map into a purpose-built interactive experience tailored to specific workflows all without writing code.

{% hint style="success" %}
**Extensions** are available on the Enterprise plan. [Contact sales](https://felt.com/sales) to upgrade.
{% endhint %}

## Examples

#### Neighborhood comparison tool

<figure><img src="/files/5vGBhOHpPkRZONmGeibb" alt="" width="563"><figcaption><p><em>Build an application that compares neighborhoods and summarizes land use patterns</em></p></figcaption></figure>

#### Data animations

<figure><img src="/files/t69fPGpmm9xUWfPGmHBx" alt="" width="563"><figcaption><p><em>Animate the flow of the Mississippi River Basin from its headwaters to the Gulf of Mexico</em></p></figcaption></figure>

#### Interactive data

<figure><img src="/files/W0qTY4Ema3Dr1rf5fYak" alt="" width="563"><figcaption><p><em>Build a tool that draws lines to all destination counties on click with travel mode options and filters</em></p></figcaption></figure>

## Create a custom extension with Felt AI

1. Click **Developer Platform** (![](/files/BHpadoUiULoA8m5mCqRJ)) in the [toolbar](/getting-started/tour-the-interface#toolbar) and select the option for **Custom extension**
2. Extensions editor opens in a split view:

   1. **the left side** includes the AI prompt area where you describe what you want your custom extension to do, and a code editor that displays the generated code with the option to refine. You can view logs in the Console tab of the prompt area as you test your extension.
   2. **the right side** shows a live preview of your map with your custom extensions

   <figure><img src="/files/ouOWF6SXJfAB0SJztYrM" alt=""><figcaption></figcaption></figure>
3. Describe the specific interaction or workflow you want by typing in the prompt area. Examples:
   1. "Build an application that compares neighborhoods and summarizes land use patterns"
   2. "When someone clicks a point, show a popup with the nearest 3 schools"
   3. "Add a sidebar that plays an animation of the data over time."
4. After a prompt is submitted, Felt AI will generate code based on your prompt and you will see the code editor update.
   1. You can modify the code directly in the code editor and hit **Run** to see the updates in the preview map.
5. Click **Save** once you have a working extension.
6. The custom extension will appear in your map’s legend.

## Polished UI

Custom extensions let you go beyond [pre-built](#pre-built-extensions) ones to create complete, purpose-built applications with polished [UI components](https://developers.felt.com/js-sdk/ui-components) like:

* **Buttons:** Quick actions viewers can click
* **Panels:** Sidebars that display summaries, stats, or workflows
* **Forms:** Inputs for viewers to enter text or select options
* **Embedded content:** Charts or dashboards from other sites displayed in your panel

[UI elements](https://developers.felt.com/js-sdk/ui-components) automatically match Felt’s design so everything looks polished and integrated. They can be rendered as buttons in the legend or panels on the right side of the map, and can draw ephemeral data (ex: isochrones) on the map based on a user interaction like a click.

## Managing extensions

Clicking on the extension in the legend allows editors to reopen the editor, rename the extension, or access additional options like copy/duplicate/delete.

<figure><img src="/files/Rj9i5Gc2e1UutD1mMtHi" alt="" width="375"><figcaption></figcaption></figure>

## Debugging

* Test your extension by exiting edit mode on the map (click the pink **Done** button top-right). Extensions can only run when viewing the map in view mode
* Only members with editor permissions can see/modify the extension code to debug.
* To find a layer ID to feed into an extension, click on **···** next to the layer in the legend, then select **Actions** > **Copy ID for API**. Note: the same data on two different maps will have a unique layer ID per map.
* Errors will appear in the **`AI assistant`** tab with a brief summary of the issue. Use Felt AI to fix the errors by clicking the **`Fix errors`** option:
* The Console tab in the prompt area shows more detailed debugging and verbose logging
* Clipboard helpers in the editor let you easily copy your map’s viewport or layer IDs
* Click on **···** next to the extension in the legend to copy, cut, duplicate, and delete extensions.

## Tips

* **Saved extensions are automatically shared** when you share your map - viewers will see the interactive functionality without needing any special access.
* Extensions run when your map is in View mode only. While in Edit mode for your map, extensions are disabled so you can edit your map safely. You can still open the extensions editor at any time to edit your extension.
* The preview shows exactly how your custom extension will work before you save or share it
* The overflow menu in the editor offers helpful options like word wrap, auto-run, and delete
* Viewers won’t see your custom extension until you save it
* If you want to go further, see the [Felt SDK API reference](https://developers.felt.com/js-sdk-api-reference/) for details on everything the SDK can do

## Pre-built extensions

Felt provides three pre-built extensions you can add with just a few clicks.

### Find

The Find extension enables map viewers to search locations and layers by entering keywords in the search box.

<figure><img src="/files/DaSOhwpF3El1zgnRHds9" alt="" width="302"><figcaption></figcaption></figure>

To add Find:

* Click **Developer Platform** in the toolbar
* Give your find tool a title
* Choose whether results include search from all layers, specific layers, or locations (places and addresses).

<figure><img src="/files/BNSGpdxo5XnPNRqyaK3B" alt="" width="334"><figcaption></figcaption></figure>

### Measure

The Measure extension provides map viewers with tools to measure distances and areas directly on the map.

<figure><img src="/files/S5ZsZkJLxFD5vtwpQjma" alt="" width="375"><figcaption></figcaption></figure>

To add Measure:

* Click **Developer Platform** in the toolbar
* Optionally rename the tool.
* Choose which measurement types to offer map viewers: line, polygon, circle, driving, cycling, walking, or flight great arc.

<figure><img src="/files/SuO9tHa1FzkKc8CtWGcT" alt="" width="318"><figcaption></figcaption></figure>

### Spatial filter

The spatial filter extension enables viewers to filter layers and export the filtered results by drawing a shape on the map. Selecting a spatial filter shows the number of features filtered, along with details about the size and shape of the filtered region.

<figure><img src="/files/GH8QaD8kypnHYumWGheJ" alt="" width="375"><figcaption></figcaption></figure>

To add Spatial filter:

* Click **Developer Platform** in the toolbar
* Optionally rename the tool.
* Choose which shapes viewers can draw (polygon, circle, or both).
* Select which map layers the filter applies to.

<figure><img src="/files/vULrvKboB1iYhAfmduiY" alt="" width="331"><figcaption></figcaption></figure>

To let viewers export filtered results, turn on **Export data** in your [map’s settings](/dashboards-and-apps/map-settings). Once the setting is on, a download icon will be available to all logged-in viewers from the spatial filter panel.

* Logged-in viewers can download results as GeoPackage, GeoJSON, or CSV
* Logged-out viewers can filter interactively but cannot download data

Spatial filters work great alongside other [components](/dashboards-and-apps/components) set to “Update based on other filters”. In the image below, the statistic and bar chart components are set to update based on other filters, such that they show risk stats for the spatially-filtered region. Lines and polygons that partially intersect the spatial filter are fully counted in calculated statistics.

<figure><img src="/files/Ukdsbagh3znQDDbrdv3M" alt="" width="375"><figcaption></figcaption></figure>

## Frequently asked questions

<details>

<summary>What are extensions in Felt?</summary>

Extensions add custom interactivity to your Felt maps, transforming them into purpose-built interactive applications. You can build them by describing what you want in natural language — Felt AI generates the code — or by writing the JS SDK code yourself.

</details>

<details>

<summary>Do I need coding experience to build extensions?</summary>

No. You describe what you want in natural language, and Felt AI generates the necessary code using the JS SDK. You can edit the generated code directly if you want to, but you don't have to.

</details>

<details>

<summary>Who can access extensions?</summary>

This feature is only available to admins and editors who are using Felt on the Enterprise plan. To upgrade, you need to contact sales.

</details>

<details>

<summary>What happens when I share a map with a custom extension?</summary>

When you share your map, your custom application is live and ready for viewers to use immediately—no extra setup or deployment needed.

</details>

<details>

<summary>Can I modify the generated code?</summary>

Yes, you can modify the code directly in the code editor and click Run to see the updates in the preview map.

</details>

<details>

<summary>What are some example use cases for extensions?</summary>

* **Neighborhood comparison tool**: Compare neighborhoods and summarize land use patterns
* **Data animations**: Animate the flow of the Mississippi River Basin from headwaters to the Gulf of Mexico
* **Interactive data tools**: Draw lines to destination counties on click with travel mode options and filters

</details>

<details>

<summary>What technology powers extensions?</summary>

Extensions are built on Felt's JS SDK. Felt AI generates the SDK code from your natural language descriptions, and you can edit that code directly in the editor.

</details>

<details>

<summary>Where does my custom extension appear after saving?</summary>

The custom extension will appear in your map's legend when editing a map.

</details>

<details>

<summary>Where does the extension code run?</summary>

Everything happens right in Felt and runs on Felt's scalable cloud infrastructure. You can preview, adjust, and save your extension with no extra setup or deployment required.

</details>

<details>

<summary>I need to find a layer ID to feed into my prompt for an extension. Where can I find this layer ID?</summary>

Click on **···** for the layer in the legend, then select **Actions** > **Copy ID for API**. This will copy the unique identifier for the layer on the map you're building the extension.

<figure><img src="/files/s2YC4hYFwBk5qMQzynVC" alt="" width="375"><figcaption></figcaption></figure>

Note: the same data on two different maps will have a unique layer ID per map.

</details>


# Custom popups

Create interactive experiences with just a prompt.

{% embed url="<https://www.youtube.com/watch?v=vXAL8FG2kuM>" %}

Custom popups let you fully customize the contents and layout of layer interactions within Felt. Describe what you want, and Felt AI generates the HTML, CSS, and JavaScript — code you can review and edit directly — all without leaving the Felt interface.

{% hint style="success" %}
This feature is only available to customers on the [Enterprise plan](https://felt.com/pricing). To upgrade, [contact sales](https://felt.com/sales).
{% endhint %}

## Examples

#### Interactive charts

Automatically generate interactive charts directly inside your popup to reveal trends and patterns at a glance.

<figure><img src="/files/iIyM2hchikTmNHoWj9w3" alt="" width="563"><figcaption></figcaption></figure>

#### Advanced navigation

Quickly create popups with expandable sections or tabbed navigation, so users can explore details without being overwhelmed.

<figure><img src="/files/N83msp25qy2xZj6aY8IA" alt="" width="563"><figcaption></figcaption></figure>

#### Branded popups

Create custom popups that reflect your organization's identity, with brand colors, typography, and logos applied automatically.

<figure><img src="/files/vhX3JN9tc3TH4fgYM7OM" alt="" width="563"><figcaption></figcaption></figure>

## Create a custom popup with Felt AI

1. Click **Developer Platform** (![](/files/BHpadoUiULoA8m5mCqRJ)) in the [toolbar](/getting-started/tour-the-interface#toolbar) and select the option for **Custom popup**, then select the layer from the menu and click **Next**
   1. You can also start from the layer itself: open the style editor and set **Type** to **Custom HTML** in the **Popup** section
2. The popup configuration dialog will open with Felt's default popups in preview

   <figure><img src="/files/W1PW2UauipaEcUX9qDdS" alt=""><figcaption></figcaption></figure>

   1. **the left side:** code editor (HTML/CSS/JS) and AI prompt area to chat with Felt AI (plus console logging for debugging)
   2. **the center:** previews (desktop & mobile available)
   3. **the right side:** layout controls (see [layout options](https://help.felt.com/layers/popup-interactions#layout-options))
3. Describe what you want your popup to display by typing in the AI prompt area
4. Review the generated HTML/CSS code and preview the popups in both Desktop and Mobile mode
   1. You can modify the code directly in the code editor.
5. Click **Save** (top right) once you are finished editing the popup
6. Test the popup experience by clicking on a feature in your map.

{% hint style="info" %}
All edits and changes are applied immediately to your previews, and once saved the changes are applied immediately to the live map.

You can always return to the configuration settings by clicking on **Edit...** in the **Content** row.
{% endhint %}

### Example prompts

* "Create a popup with tabs showing property details, demographics, and transit data in separate card layouts with the property photo at the top"
* "Show a bar chart comparing this location's sales data to regional averages"
* "Add an expandable section that shows basic info first, with a Show Details button"

## Write your own

You can also utilize pre-written HTML, CSS, and Javascript to control what appears when interacting with features. Felt uses the [Liquid Template Language](https://liquidjs.com/tutorials/intro-to-liquid.html) to make it easy to quickly build your custom HTML popups. Liquid includes features like iteration, conditional branching, and helpful [filters](https://liquidjs.com/filters/overview.html) to easily format text. Note: for security reasons, third-party iframe embeds might not work within custom HTML popups.

## Learn more

See [Popup interactions](/layers/popup-interactions) for the other popup types — standard and iframe — plus layout options and interaction behavior.

## Frequently asked questions

<details>

<summary>What are custom popups in Felt?</summary>

Custom popups let you fully customize the contents and layout of layer interactions within Felt using HTML, CSS, and JavaScript. You can have Felt AI generate the code from a description, or write and edit it yourself — all without leaving the platform.

</details>

<details>

<summary>Who can access custom popups?</summary>

This feature is only available to admins and editors on the Enterprise plan. To upgrade, you need to contact sales.

</details>

<details>

<summary>Do I need to write code to use this feature?</summary>

No, you can describe what you want using natural language prompts in the AI prompt area. Felt AI will generate the HTML/CSS/JS code for you, though you can modify the code directly if desired.

</details>

<details>

<summary>Can I preview my popup on different devices?</summary>

Yes, you can preview your popup in both Desktop and Mobile mode before saving.

</details>

<details>

<summary>When are changes applied to my map?</summary>

All edits and changes are applied immediately to your previews. Once saved, changes are applied immediately to the live map.

</details>

<details>

<summary>How do I edit a popup after saving it?</summary>

You can return to the configuration settings by clicking on **Edit...** in the **Content** row.

</details>

<details>

<summary>What languages/technologies can I use in the code editor?</summary>

The code editor supports HTML, CSS, and JavaScript.

</details>

<details>

<summary>Can I modify the generated code?</summary>

Yes, you can modify the code directly in the code editor after Felt AI generates it.

</details>

<details>

<summary>How do I test my popup after creating it?</summary>

Test the popup experience by clicking on a feature in your map.

</details>

<details>

<summary>Where can I find more information about popups?</summary>

See [Popup interactions](/layers/popup-interactions) documentation for more detailed information about popups.

</details>


# REST API

Create and modify maps programmatically with code.

{% embed url="<https://www.youtube.com/watch?v=ANj2c4fY2go>" %}

Felt's [**REST API**](https://developers.felt.com/rest-api/getting-started) allows editors to interact with the Felt platform via code, performing actions such as creating new maps, adding data to maps, styling layers, and more. The REST API can be leveraged from any environment that is capable of sending GET and POST requests.

For Python users, interactions with the REST API are simplified through the [**felt-python**](https://github.com/felt/felt-python) **module**, which can be installed with `pip` and used to call the REST API endpoints directly from Python functions.

Visit our [Developer docs](https://developers.felt.com/) for comprehensive documentation, code examples, and guides to get started.


# JavaScript SDK

Build custom experiences for map viewers with the JavaScript SDK.

{% embed url="<https://www.youtube.com/watch?v=bHHPsuK3xO8>" %}

Felt's user interface allows a large amount of customization, offering the ability to generate complex cartographic designs, adding components to create a dashboard, and much more.

However, sometimes application developers need further control over the experience of viewing and/or interacting with a map. For example, they may want to run custom logic after a user clicks on a feature in a layer, or animate data on the map based on other types of user input elsewhere on the webpage. For these situations and many more, Felt's [**JavaScript SDK**](https://developers.felt.com/js-sdk/getting-started) allows developers to load a Felt map into their application while providing opportunities to hook into the interaction loop and more broadly customize the experience of the map viewer.

The SDK also powers [Extensions](/developer-platform/extensions) — custom tools that run inside Felt itself, with AI drafting the SDK code for you.

Visit our [Developer docs](https://developers.felt.com/) for comprehensive documentation, code examples, and guides to get started.


# Annotations

Add helpful text, arrows, data, and callouts to maps for clearer communication with annotation tools.

{% embed url="<https://youtu.be/3gLvhVlX82Y?si=4GiA3m8Y6DhmJiK9&t=497>" %}

Annotations allow you to highlight important features, add context, and create a more engaging map experience. With annotations you can draw pins, lines, routes, areas, and circles. These drawn features can be exported as spatial data directly from the map. Other annotation tools like marker, text, notes, and links are designed to enhance your storytelling and guide viewers through your map's key points. All of Felt’s Annotations are located on the top [toolbar](/getting-started/tour-the-interface#toolbar) and can also be accessed via [shortcuts](/getting-started/keyboard-shortcuts).

{% hint style="info" %}
Annotations were formerly called "elements" in Felt.
{% endhint %}

## Annotation tools

Felt offers several [tools](/getting-started/tour-the-interface#tools) called annotations (formerly called "elements") to help you communicate your spatial narrative. To access the annotation tools, members with Edit or Contribute permission can click on the <img src="/files/WhGKWWlZJFSJktSA0g5A" alt="" data-size="line"> in the top toolbar, or from the <img src="/files/4BCexrU4qpRdNIVGnveg" alt="" data-size="line"> button in the Field App. Annotations can be easily duplicated (**Cmd/Ctrl+D**), repositioned, rotated and [styled](/annotations/styling-and-grouping).

{% hint style="info" %}
Want to use your Felt-created data somewhere else? Points, lines, routes, polygons, and circles can be exported as GeoJSON files and brought into QGIS, OpenStreetMap or any of your tools of choice. See [#export-as-data](#export-as-data "mention") to learn more.
{% endhint %}

### ![](/files/NXK2Iy2oSvx174qEyIWr) Pin

* Add a pin to the map to locate a place.
* Customize the pin style and add images and information fields in the detail panel.
* Pins can also be created via Search (see [Navigation & Search](/getting-started/tour-the-interface#searching-for-places) for more details).

{% hint style="info" %}
**Tip:** You can paste geographic coordinates directly on a Felt map and a pin will be placed at that location.
{% endhint %}

### ![](/files/RYj4KuE1ohUIhfkNd9GZ) Line

* Emphasize linear features by drawing lines on your map.
* Vertices can be added or moved after the line is created.
* If you wish to extend a line, click the last point and select ‘extend.’
* From the detail panel, turn the option for **Distance** on to **see the distance** of lines as you draw.
* Hold **Shift** to draw straight or perpendicular lines.

### ![](/files/iXio2OoUbsQSzhkwvZyR) Route

* Route will navigate to the shortest path between your first anchor and where you move your cursor.
* To draw routes on the map choose drive, cycle, walk or flight options.
* From the detail panel, turn the option for **Distance** on to **see the distance** as you draw.
* Add anchors for more control over your path.
* Hold **Shift** to draw a straight line.

### ![](/files/ZokHgMSuxeZ83bZ5aY3c) Polygon

* Emphasize areas by drawing polygons on your map.
* Vertices can be added or moved after the polygon is created.
* From the detail panel, turn the option for **Area** on to **see the area** of polygon features as you draw.

### <img src="/files/TeNQHs3AohoysvdVWxbr" alt="" data-size="original"> Rectangle

* Click to draw the first corner, then click again to set one side of the rectangle, and then extend in one direction complete the shape
* Rectangles will always have 4 vertices
* They can be resized or rotated after creation while the aspect ratio (length to width ratio) remains locked
* Hold **Shift** after drawing the second corner to create a perfect square

### ![](/files/4xPKJuISwMN61qnxNOUR) Circle

* After selecting the Circle tool, click on the center and drag outwards to a certain radius.
* The radius can be specified as a numeric value in meters, kilometers, feet or miles.

### ![](/files/kgWWOJRHPObFPeCQAOvJ) Marker

Create free-form markings like arrows to highlight areas of interest.

### ![](/files/Nw8yDJjuiXQhwvJOsUG0) Highlighter

Add semi-transparent markings that allow the basemap to show through, perfect for subtle emphasis while maintaining visibility of underlying features.

### ![](/files/xvnn4H6eZIVHlTTCi57h) Text

Add labels and descriptions directly on your map. Adjust font style, size, color, and position to create clear, readable annotations.

### ![](/files/0Fcre0aD6QY8v05fndUC) Note

Create text boxes to explain features or provide additional context. Notes are ideal for adding detailed information that wouldn't fit in a simple label.

### ![](/files/R4DjqdHY5WuSoWhBf5JQ) Link

Embed URLs like websites directly on your map either by selecting the link tool and entering the URL or by pasting the URL directly on your map. Links display with preview thumbnails by default.

### ![](/files/RPvCy6Nu9vTwF2dC7oM6) Video

Embed videos directly on your map, with preview thumbnails either by selecting the video tool and entering the URL or by pasting the URL directly on your map. YouTube links will display with full video previews.

{% hint style="info" %}
**Tip:** You can drag and drop photos directly onto your Felt map. If the image contains embedded location metadata (EXIF), Felt will read it and prompt you to place the photo at its recorded location.
{% endhint %}

### Images

* Felt can overlay images and PDFs on a map
* Images uploaded to Felt are treated like Polygon annotations and sit on top of the layers
* With these images you can set **Opacity** and **On click** behavior
* There are two **On click** settings: **Do nothing** or **Show larger**

<figure><img src="/files/a6ZaIxbmlZySWaan0c8u" alt="" width="341"><figcaption></figcaption></figure>

## Adding attributes

Annotations have names, descriptions, and images, as well as an unlimited number of attributes (pairs of names and values).

To add attributes:

* Select an annotation or group of annotations you want to add attributes to.
* In the detail panel on the right side, click on the **Details** tab.
* Click **Add row** to create a new attribute.
* Enter a name for your attribute (e.g., "year") and then press Tab to move to the value field.
* Enter the value for your attribute (e.g., "1990").
* To add this attribute to multiple annotations at once:
  * Select a group of annotations
  * Click **Select group contents**
  * In the Details tab, look for the attribute you want to apply
  * Click the overflow menu (three dots) next to the attribute
  * Select **Add row to all selected annotations**

<figure><img src="/files/cnx8zomD7UkY89eswv0v" alt="" width="375"><figcaption></figcaption></figure>

## Enabling measurements

You can enable measurements for routes, lines and polygons both during creation and also later in the detail panel.

* Select an annotations or group of annotations and choose the option to show Area (for polygons) or Distance (for lines and routes)
* Choose between US and Metric units in the **Felt > View > Units** menu, or use the **Cmd+K** menu and select Switch to US/metric units

## Convert to layer

{% hint style="success" %}
Felt recommends using layers to manage your spatial datasets. To learn more about editing data layers, see [Editing layers](/layers/editing-layers).
{% endhint %}

You can convert pins, lines, polygons, and other annotations into layers to unlock all Felt's [layer ](/layers/table-view)functionality. Transform your hand-drawn map annotations into structured data that can be used in your Felt map or exported to other GIS applications.

* Select the annotation(s) you want to export
* Right-click and go to **Actions** → **Convert to layer** to transform your annotations into a data layer

<figure><img src="/files/DjqdkiUBBkpvz2KToWBT" alt="" width="375"><figcaption></figcaption></figure>

### Export as data

You can download individual annotations using the overflow (three-dot) menu or by using the right-click menu.

**Types of annotations that can be exported**

* ✅ Pins, lines, polygons, routes, circle, marker, highlighter and notes
* ❌ Images, videos, links and text

There are two ways to export your map annotations as GeoJSON:

* Go to **Felt > File** from the top-left menu
  * You can export all annotations with **Export all annotations** or only selected annotations with **Export selected**
* Alternatively, you can export selected annotations on the map by right-clicking and selecting the option **Export > To GeoJSON**

<figure><img src="/files/0wmU7YLPMYS4Pol4yERv" alt="" width="375"><figcaption></figcaption></figure>

## Best practices

For most data-driven workflows [Editing layers](/layers/editing-layers) in Felt is the better choice and we recommend working with layers in Felt. Annotations work well for quick markup and very small datasets. Here's when to use each:

#### **Layer editing is best for:**

* Datasets with more than 100 features
* Using table view to see and edit all your data at once
* Advanced styling options (categorical symbology, graduated colors, zoom-based visibility, label control, etc.)
* Better map performance through tiling (especially important for large datasets)
* The ability to export and reuse your data across multiple maps
* Professional and Enterprise workflows in Felt

#### **Annotations are best for:**

* Quick visual markup for presentations or comments
* Simple styling for a handful of features
* Lightweight additions that don't need structured data management
* Personal plans in Felt (uploads aren't available on Personal, but annotations are)

You can [convert annotations to a data layer](/annotations/converting-annotations-layers#converting-annotations-to-layers) to get started with editable layers. Right-click your group of annotations and select **Actions** → **Convert to layer** to unlock full layer functionality.


# Styling & grouping

Style and group map annotations.

<figure><img src="/files/lsw8TnCDnc8zqYalNj9p" alt=""><figcaption></figcaption></figure>

Annotations in Felt can be visually customized to match your design needs and highlight important information. Annotations can be styled individually or in groups.

## Annotation styling

### Styling options

* Select a single annotation, multiple annotations or a group of annotations you want to style
* Use the style controls in the right panel to adjust appearance

<figure><img src="/files/n4eH5R8nBbpnbfl4RmeF" alt="" width="563"><figcaption></figcaption></figure>

| Styling option | Description                                                                                    | Annotation types                                                       |
| -------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------- |
| Opacity        | Adjust the transparency. For polygons, adjust the opacity of the Fill and Stroke individually. | Routes, Lines, Polygons, Markers, Highlighters and Images              |
| Width          | Set the stroke width in pixels                                                                 | Routes, Lines and Polygons                                             |
| Stroke style   | Choose between a Solid, Dashed or Dotted stroke                                                | Routes, Lines and Polygons                                             |
| Endcaps        | Add Start and End endcaps                                                                      | Routes                                                                 |
| Routing        | Switch routing mode between Driving, Cycling, Walking and Flying                               | Routes                                                                 |
| Align          | Choose between Left, Center or Right-alignment                                                 | Text and notes                                                         |
| Style          | Select a Italic, Light, Regular or CAPS text style                                             | Text and notes                                                         |
| Distance       | Toggle the distance measurement                                                                | Routes and Lines                                                       |
| Radius         | Toggle the radius measurement                                                                  | Circles                                                                |
| Area           | Toggle the area measurement                                                                    | Polygons                                                               |
| Show name      | Toggle the label                                                                               | Pins                                                                   |
| Attributes     | Add name-value pairs of details, as seen in [annotations](/annotations/annotations)            | Pins, Routes, Lines, Polygons, Markers, Highlighters, Images and Links |

### Selecting annotations

* You can select annotations by clicking on them. To select multiple annotations at the same time, hold the **Shift** key and click while dragging.
* Use the right-click menu to select annotations of same type, color or icon. Very useful for batch-editing!

<figure><img src="/files/LXbGo2TEvV8fQiFGkXtD" alt=""><figcaption></figcaption></figure>

### Resizing and rotating

Annotations can be resized and rotated. Most annotations can only be resized by pulling from the corner, but you can change the aspect ratio for notes and images by pulling from the side as well.

{% embed url="<https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmRfGitkyjOEMvVsEyGWN%2Fuploads%2F8jsLyvWqqw8tosLpPgZa%2Frotate_resize_note.mp4?alt=media&token=c73df19c-c5cf-444d-84a3-45c151eb5266>" %}

### Locking annotations

Once you’re done creating and fine-tuning your objects, you can lock them to make sure they aren’t inadvertently moved or modified. Locking will prevent making any changes to an object’s style or properties until it’s unlocked.

* Select the annotations you want to lock
* From the three dot menu choose the option to **Lock**
* To unlock choose the option to **Unlock**

<figure><img src="/files/de3QZHvLPcArp6fwnAc2" alt="" width="563"><figcaption></figcaption></figure>

### Arrange options

To arrange the drawing order between annotations

* Select the annotation you want to rearrange
* Right click and hover **Arrange** to choose the appropriate ordering

<figure><img src="/files/Wr0RPYZQ5axYVk3WqUst" alt="" width="375"><figcaption></figcaption></figure>

## Annotation groups

Annotations are great for adding context to the map, but having too many of them can quickly get hard to manage. Grouping annotations is a useful way to categorize and organize annotations and allow for visibility control in the legend.

{% embed url="<https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmRfGitkyjOEMvVsEyGWN%2Fuploads%2F2ByzG0J7Mtu6vxmghXYa%2FFull_Grouping_Story.mp4?alt=media&token=755bd56e-9630-4a80-8f42-5ec3d88d52ba>" %}

### Creating Groups

To assign annotations to a new or existing group:

* Select the ones you want to group and then click on the **Group** button.

<figure><img src="/files/f97CHvYoXtDWZ6RyuFO9" alt="" width="563"><figcaption></figcaption></figure>

This also works for multiple annotations selected together, either using **Shift+Click+Drag**, the **Cmd+K** menu or right-clicking on an annotation, then picking from the **Select similar...** options.

### Editing groups & toggling visibility

Groups are visible in the [List view](/layers/list). Simply click the eyeball icon to hide or show a group.

By clicking on a group in the **List view**, one can select all the contents, change icons for pin annotations inside that group or even update details for many annotations at once.

<figure><img src="/files/9RRc03sC5aKVTOhHlPeD" alt="" width="563"><figcaption></figcaption></figure>


# Extract

Select and extract specific map features to easily create boundaries.

{% embed url="<https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmRfGitkyjOEMvVsEyGWN%2Fuploads%2FUKs4U0bTDR6RhpAGF3ny%2FScreen%20Recording%202025-03-03%20at%201.56.14%E2%80%AFPM.mp4?alt=media&token=191b168b-138a-4a0d-965d-5109dd3925d0>" %}

The **Extract** tool can be used to get polygon annotations for boundaries or building footprints.

* Click on the ![](/files/vKqAJbgA6ji6gThGfNmO)**Extract** tool in the toolbar
* As you move your cursor over the map, different boundary options will highlight based on your current zoom level
* Click on a highlighted boundary or add many by holding **Shift** to draw a selection area to extract as a new polygon annotation(s)

### Zoom level and boundary types

The Extract tool is zoom-sensitive, offering different boundary options based on how far you've zoomed in:

* **Zoomed out**: Country and large administrative areas
* **Medium zoom**: States, provinces, counties
* **Zoomed in**: Cities and neighborhoods
* **Highly zoomed in**: Building footprints

You can see the level that you are at as you zoom the map

<figure><img src="/files/gRxxU736yfCo4Y4fYSDD" alt="" width="563"><figcaption></figcaption></figure>

#### Available boundaries

**United States**

* Countries
* States
* Counties
* Cities
* Neighborhoods
* Buildings

**Rest of the world**

* Countries
* First-order Administrative Divisions
* Second-order Administrative Divisions
* Buildings


# Converting annotations ↔ layers

Convert annotations to data layers for flexible mapping.

Convert your map annotations into layers, giving you flexibility in how you work with and visualize your spatial data.

{% hint style="info" %}
Felt recommends using [layers](/layers/basemaps) to manage your spatial datasets. To learn more about editing data layers, see [Editing layers](/layers/editing-layers).
{% endhint %}

### Annotations vs. layers

[**Annotations**](/annotations/annotations) are individual map objects that live at the top of your map. They're excellent for creating data, adding context, and storytelling on your map. Annotations are best for creating one-off data or storytelling.

[**Layers**](/layers/basemaps) provide more advanced visualization options and data-driven styling capabilities. Converting annotations to layers unlocks all the features you have with layers. Layers are best for visualizing and managing datasets. And, layers are fully editable.

### Converting annotations to layers

Converting annotations to layers is particularly useful when you've drawn annotations and added attributes that you now want to visualize based on those attributes.

To convert annotations to layers:

* Select the annotation(s) you want to convert
* Right-click and go to **Actions** → **Convert to layer**
* Your new layer will appear as a layer on your map and accessible from the legend or list

<figure><img src="/files/UzOKltY7qDU65st6Sc3s" alt="" width="375"><figcaption></figcaption></figure>

### Converting specific features to annotations

Sometimes you may want to convert specific features within a layer to annotations. This can be helpful when you want to pull out certain features from a layer to highlight with annotations.

Extract can also be used to fetch pins, lines or polygons from [layers](/layers/table-view).

* Add a layer to your map
* Click on the feature you wish to extract
* Click on the overflow menu (**...**) in the popup, then click **Duplicate to annotation**

<figure><img src="/files/hjHZlCWzIo0srZttzTvj" alt="" width="355"><figcaption></figcaption></figure>

{% embed url="<https://www.youtube.com/watch?v=CXJsnoYEvWs>" %}


# Sharing a map

Share maps with custom permission settings and public or private access.

{% embed url="<https://40056855.fs1.hubspotusercontent-na1.net/hubfs/40056855/Share_HelpCenter.mp4>" %}

## Share menu

{% hint style="info" %}
Looking to manage share and control permissions for your entire org? See [Managing members](/administration/managing-members)
{% endhint %}

To share your map, click on the **Share** button on the top-right corner of your map.

From this menu you can:

* invite collaborators directly via email,
* control public access to the map, or
* *(draft maps only)* adjust the access level for all workspace members.

<figure><img src="/files/xbr7Z7GPaNthk5d8Zlp8" alt="" width="375"><figcaption></figcaption></figure>

### Sharing across the workspace

To share maps between teammates, move maps into Projects in the workspace. Projects control which teammates have access to which maps, and Projects can be set to public (to everyone in the workspace) or private. See [Workspaces and projects](/administration/workspaces-and-projects) for more information.

Members in the same workspace can access maps in public projects and maps in private projects they're invited to.

Project Admin can set the default permission for all members with access to the project. The default permission for each project can be set as: View, Contribute, and Edit.

This default permission will override the member's permission if the default permission grants a lower access level than a member's workspace permission.

For example, if a public project's default is set to **View**, every member's permission will be View in that project:

* A member with **Edit** workspace permission will see the project maps with **View** permission.
* A member with **Contribute** workspace permission will see the project maps with **View** permission.
* A member with **View** workspace permission (or a Viewer seat) will see the project maps with **View** permission.

See [Managing members](/administration/managing-members#workspace-permissions) for more info.

### Invite collaborators by email

You can also invite external collaborators or existing workspace members to specific projects and maps. External collaborators can only see maps they’ve been invited to.

### Control public access

Public access sets the baseline permission for your map. It's what anyone gets if they haven't been given access another way, either by a direct invite to the map or through a project or workspace.

<figure><img src="/files/tBz5ZitJYVGALnlxJiig" alt=""><figcaption></figcaption></figure>

| Setting  | Description                                                                                                              |
| -------- | ------------------------------------------------------------------------------------------------------------------------ |
| **None** | Only members directly invited to the map or who have access via the workspace can view the map. The most secure setting. |
| **View** | Anyone with the link can view.                                                                                           |

*On some legacy plans you may also see a **View and comment** option — anyone with the link can view and place location-based comments (requires a Felt login). On current plans, posting comments requires a Full Access seat.*

## Setting your map view

You can set a default view that workspace members land on when opening the map. This ensures the map opens to a certain location and zoom level by default:

**Felt Menu** (top-left) → **View** → **Set current view as default**

<figure><img src="/files/dBu2M3dg1lK0QqYazrHK" alt="" width="375"><figcaption></figcaption></figure>

When copying a map link through the **Share** menu using the **Copy link** button (bottom-right corner), the link automatically includes some URL parameters that point to your current view. Take the following URL:

<https://felt.com/map/Kontur-Population-yiQAmRZ9CTTK49CHfYp9AauvC?loc=32.55,23.37,3.26z>

The **loc** parameter specifies the center coordinates of the center of the view and the **z** parameter at the end of the URL indicates the level of zoom.

Using these parameters, you can share specific views of your map with people, or even embed different views of a same map on your website.

## Troubleshooting

If you or someone you share the map with sees a "This browser or computer isn't supported" error message when opening a map:

<figure><img src="/files/MC1WFYQQfuihOKA4fG9g" alt="" width="365"><figcaption></figcaption></figure>

This is due to either:

1. WebGL not being enabled on the browser (most common)
2. The device or browser not supporting WebGL

To verify and fix:

1. Go to <https://get.webgl.org/> to verify WebGL is enabled. If enabled, you should see a spinning cube on this page:

<figure><img src="/files/7RB2ROC06D092oZboqGb" alt="" width="375"><figcaption></figcaption></figure>

2. Confirm graphics/hardware acceleration is enabled for your browser. Search “Enable WebGL in \[browser + version]” to find the location of the setting.
   1. Chrome: available in chrome://settings/system

      <figure><img src="/files/20r28Fg6suW5LASNlysS" alt=""><figcaption></figcaption></figure>
   2. Firefox: available in performance settings: <https://support.mozilla.org/en-US/kb/performance-settings>.


# Sharing a data source

Share Felt Servers, Cloud sources, and Raster infrastructure with custom permission settings and public or private access.

## Share menu

To share a data source, open it from the **Data sources** section of the workspace homepage or in-map library and click the **Share** button in the source's header.

From this menu you can:

* invite collaborators directly by email,
* control workspace-wide access to the source, or
* change the permission of an existing member on the source.

{% hint style="info" %}
The **Global Library** is visible to every workspace and has no sharing controls.
{% endhint %}

### Sharing across the workspace

The user permission settings for sources are described below.

| Setting            | Description                                                                                                                                                                            |
| ------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **None (private)** | Only members directly invited to the source can access it. A lock icon appears on the source in the sidebar. The most secure setting.                                                  |
| **View**           | Browse the source and read its data, including through Felt AI or MCP tools. View also allows members to add layers from the source to a map, assuming their seat permits map editing. |
| **Edit**           | Control over the source itself: edit the source credentials or delete the source, view and write custom SQL queries against it, and manage other member's source permission.           |

There's also a fourth, higher permission — **Source admin** — initially granted to the creator of the source, though it can be shared with others. It includes everything Edit can do, plus the ability to change the source's default *permission* and invite other source admins. See [Permissions](/administration/felt-permissions#data-source-level-permissions) for the full permissions model.

### Invite collaborators by email

Type one or more addresses into the email field, pick a permission, and click **Invite**. Invitees who aren't already workspace members receive an invitation via email.


# Commenting

Add location-specific comments for collaborative map review and feedback.

{% embed url="<https://youtu.be/2awZEvQNUBk?si=Jq6tWQtan62RSSF8&t=40>" %}

Commenting allows you to attach feedback directly to map locations, organize discussions in threads, and notify team members with @mentions. Share maps with customized viewing and editing permissions, then track feedback through the comment panel where conversations can be resolved and revisited. Comments maintain their location and zoom level, can be shared via direct links, work on mobile devices, and can be exported as georeferenced CSV or JSON files for further analysis.

## Comments

Comments are a great way for other users to interact with and collaborate on your map. Add one by clicking on the comment button ![](/files/cbJNsm3mWArykiaICQ4C) in the top-right corner of the [toolbar](/getting-started/tour-the-interface#toolbar), then clicking on your desired location in the map.

Posting comments requires a [Full Access seat](/administration/licenses) — any member with a Full Access seat can comment, even on maps where they only have View permission. Viewer seats can read comments but can't post them. *(Workspaces on some legacy plans still allow Viewer seats to comment; if yours is one, nothing changes for you.)*

All unresolved comments are visible on the map and in the **Comments list** (toggle it on or off by clicking on the **Comments** button). Clicking on a comment in the list will take you to the same view that the commenter was seeing.

### Using and managing comments

* Data layer features can be tagged in comments, which are included in comment exports

<figure><img src="/files/HEI3ihE95KH0C8Fm03lm" alt="" width="375"><figcaption></figcaption></figure>

* Answer to another comment to start a thread
* Map owners will receive email notifications when someone comments on their maps
* Commenters will receive email notifications when someone responds to their comment
* Click the checkmark button on a comment or thread to resolve it.
* Resolved comments can be found using the **Show resolved comments** option in the overflow menu

<figure><img src="/files/VsgiCSUbkdJJMh6poYeX" alt="" width="216"><figcaption></figcaption></figure>

* A commenter can delete comments they've added
* A member with [Edit permission](https://help.felt.com/administration/managing-members#workspace-permissions) can delete any comments

### Tagging features

Comments automatically detect if you are near existing features, and you can tag specific features to associate the comment with that feature. By default, the Felt feature ID will appear in the tag's name on the comment. But if the layer is styled with a popup title or labels are applied, the attribute used in those settings will appear as the tagged feature name instead.

On mobile, when your comment is near multiple features, there is a menu to select a nearby feature to tag in the comment. Tap on the + Point at option from the comment panel to select which feature to tag in the comment.

### **Commenting from table view**

Add, view, and navigate comments directly from the [table](/layers/table-view) to create a connection between your map data and conversations, making it easier to discuss specific features while maintaining context of their attributes and related information.

To comment from the table:

* Select the layer you want to add comments to and click the table icon (![](/files/0kvyY6RmHLm6leFaE7Kv)) in the [detail panel](/getting-started/tour-the-interface#detail-panel) to open the table
* Select a row in the table, right-click and choose the option to **Add a comment...**
* Type your comment and submit it to attach the comment to the selected feature

<figure><img src="/files/S0DZh1kixXQCcoSCUBxK" alt="" width="375"><figcaption></figcaption></figure>

* Once comments are added, the table will update to include a comment column that shows which features have comments associated with them

<figure><img src="/files/gyWYfSsrepy6LBjs9akC" alt="" width="335"><figcaption></figcaption></figure>

* To sort features by number of comments, click on the column heading and select an option

<figure><img src="/files/aXTa1ixaKGaSAfMUHnGB" alt="" width="342"><figcaption></figcaption></figure>

There are a few different ways to interact with comments between the map and table view:

* When you select a comment on the map, Felt highlights the corresponding row in the table, creating a quick visual connection
* Clicking on the comment icon from a table row zooms to and expands that comment thread on the map
* The table remains open when commenting, allowing you to reference your data while discussing specific features

## Exporting comments

You can download comments by clicking on the **...** in the comment list. Only map editors can perform this action.

<figure><img src="/files/Mk9107kCqwQyA2kI5iym" alt="" width="216"><figcaption></figcaption></figure>

The following fields are exported when downloading comments:

* thread\_id
* comment\_id
* name
* email
* comment
* created\_at
* url (zoom to comment)
* is\_resolved
* lat & long
* feature\_data
* data\_updated\_after\_comment
* image\_urls

## **API access for comments**

You can export comments programmatically from a map using the API endpoint for [comment exports](https://developers.felt.com/rest-api/api-reference/comments#export-comments-from-a-map) or resolve comments via the API using the [comment resolve](https://developers.felt.com/rest-api/api-reference/comments#resolve-a-comment) endpoint to update comment status.

## Frequently asked questions

<details>

<summary>Can anyone comment on my map, or do they need an account?</summary>

You need to be logged in to a Felt account and have a Full Access seat to post comments. (Some legacy plans also allow Viewer seats to comment, and legacy "View and comment" public links allow any logged-in visitor to comment.)

</details>

<details>

<summary>How do I assign or tag someone in a comment?</summary>

You can send them an email directly by typing `@` and entering their email address. You can also type their name if they have an account in Felt.

</details>

<details>

<summary>What does @mentioning someone do? Do they need to be a Felt member?</summary>

@mentioning someone in a comment sends them an email notification pointing them to that comment on the map. The person does *not* need to be a Felt member to receive the notification — it goes to their email directly. This is useful for looping in stakeholders or reviewers who don't have a Felt account.

</details>

<details>

<summary>Can I turn off email notifications when someone comments on my map?</summary>

Yes, comment email notifications can be disabled as a manual process on our end. Email <support@felt.com> to specify which email addresses you'd like to turn off comment notifications for, and we'll take care of it.

</details>

<details>

<summary>Can commenters edit or delete their comments?</summary>

Anyone who has posted a comment can edit or delete their own comments. Posting requires a Full Access seat — Viewer seats can read comments but can't post them (except on some legacy plans).

</details>

<details>

<summary>How do I export comments from my map?</summary>

Click the **...** menu in the comment list to download comments. Comments can be exported as georeferenced CSV or JSON files. Only map editors can do this.

You can also export comments programmatically via the API using the comment exports endpoint.

</details>

<details>

<summary>How do I resolve or find resolved comments?</summary>

Click the checkmark on any comment or thread to resolve it. To revisit resolved comments, use the **Show resolved comments** option in the overflow menu (…).

</details>

<details>

<summary>Who can delete comments?</summary>

A commenter can delete their own comments. Members with Edit permission can delete any comment.

</details>


# Embedding

Embed interactive maps in websites with customizable display options.

{% embed url="<https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmRfGitkyjOEMvVsEyGWN%2Fuploads%2FSo7PHEJvg3cxpFrkuQxJ%2FBranded%20Embeds.mp4?alt=media&token=cf61d6ea-ebdd-4ea8-a153-923be50802db>" %}

{% hint style="info" %}
Embedded maps are available on Professional and Enterprise plans. Authentication-gated embeds (login required to view) are Enterprise only — [contact sales](https://felt.com/sales) for details.
{% endhint %}

Embed an interactive Felt map within your organization’s website, blog, or Notion page. Viewers will be able to pan, scroll and toggle Data Layers.

* To embed your map on a website, navigate to **File > Embed** in the **Felt** menu (upper-left corner) or the **Share** menu (upper-right corner).
* Add your company logo/name, customize the color bar, and choose which parts of the UI to show/hide, like the Legend.
* If components like **Measure** and **Search** are added to your map, they will also appear in the embed for viewers to interact with.
* Adjust the size using preset sizes or set a custom size.
* Move the map to the right spot, then copy the HTML iframe block to embed that view on your site.

{% hint style="info" %}

### Embedding in Notion or WordPress?

Instead of following these steps, simply copy the map link as seen in [Sharing a map](/sharing-and-collaboration/sharing-a-map). This is possible thanks to Felt's oEmbed API. See [Integrations](/sharing-and-collaboration/integrations) to learn more.
{% endhint %}

## Configuring embeds

<figure><img src="/files/3QPSSH30OusXl0pfshwi" alt="" width="563"><figcaption></figcaption></figure>

There are two ways to share an embed:

* **Embed**: add an `<iframe>` snippet on your website to include the map with other items on the page. This section will provide you with a code snippet to copy and paste onto your website.
* **Web page**: share your branded embed map as a full web page. This section will provide you with a Felt URL to share.

Toggle between **Embed** and **Web page** sections to share your embed as desired.

<div><figure><img src="/files/rimDjUbhIPlZNgwWP9Ro" alt="" width="257"><figcaption></figcaption></figure> <figure><img src="/files/se3nhWe65u0rYt4Ny78P" alt="" width="255"><figcaption></figcaption></figure></div>

#### Adding a top bar

Toggling **Top bar** on allows you to configure a custom color, logo, and text to the top of the Felt embed map. You can configure:

<figure><img src="/files/jEZDlHMSSG2O04Dlj3oC" alt="" width="563"><figcaption></figcaption></figure>

* **Bar color**: set a color to match your brand (pro tip: use our color picker tool)
* **Bar logo**: upload a logo icon to place in the top-left corner of the bar
* **Bar text**: set a top-level title for the embed

{% hint style="info" %}
The map title will remain on the map at the top of the legend, and the legend will be a collapsable list.
{% endhint %}

#### Controls & settings

For `<iframe>` **Embed** types, you can include or exclude the following map items:

{% columns %}
{% column width="41.66666666666667%" %}

* Interactive map legend
* Full screen map link
* Viewer location tool
* Zoom (- / +) buttons
* Scale bar
  {% endcolumn %}

{% column width="58.33333333333333%" %}

<div align="right"><figure><img src="/files/0XZ5s1Hn9jgwSYvoF2Q4" alt="" width="255"><figcaption></figcaption></figure></div>
{% endcolumn %}
{% endcolumns %}

{% columns %}
{% column width="50%" %}
Default **Zoom** behavior to hook into **On scroll** behaviors on the website or requiring a modifier key ("Hold **Cmd** while scrolling to zoom the map").

Default requires a modifier key.
{% endcolumn %}

{% column width="50%" %}

<div align="right"><figure><img src="/files/oprMtktw03TcDsia2lbB" alt="" width="258"><figcaption></figcaption></figure></div>
{% endcolumn %}
{% endcolumns %}

{% columns %}
{% column %}
**View** represents the default viewport. These are the center coordinates and the zoom level at load or refresh.

Panning and zooming in the embed preview will change these parameters.
{% endcolumn %}

{% column %}

<div align="right"><figure><img src="/files/njKyMR658vFERwICGhDw" alt="" width="249"><figcaption></figcaption></figure></div>
{% endcolumn %}
{% endcolumns %}

## Authenticated embeds

Although Felt's default embeds require public link access Felt supports authenticated embeds for map links that cannot be public. There are two options to provide secure access to your private embedded maps in your organization’s website, blog, or Notion page.

Access to embedded Felt maps can be gated in two ways:

1. **Token-based authentication**
2. **User-based authentication**

## Token-based authentication

Map access is limited by a single-use authentication token generated by [Felt’s REST API](https://developers.felt.com/rest-api/getting-started). Authenticate the embed view by including the token as a query parameter in the map URL.

Token-authenticated users can view the embedded map without logging in. If the token is generated with an associated user email address, those users can also export data from the map.

See the [developer documentation](https://developers.felt.com/rest-api/api-reference/embed-tokens) for implementation details.

## User-based authentication

Map access is limited to logged-in Felt users who have been explicitly invited to the map. Embedded views honor the same sharing permissions as the main map.

To configure user-based authentication:

1. Click the **Share** button in the upper-right corner of your map
2. Set **Public access** to **None**
3. Invite specific users by email (must match their Felt account email)

<figure><img src="/files/Jhpx6loGXCtzPe8UnQ8x" alt="" width="375"><figcaption></figcaption></figure>

## Frequently asked questions

<details>

<summary>What is map embedding?</summary>

Map embedding allows you to display a live, interactive Felt map within your organization's website, blog, or Notion page. Viewers can pan, scroll, and interact with the map without leaving your site.

</details>

<details>

<summary>What plan do I need to embed a Felt map on my website?</summary>

Embedded maps are available on Professional and Enterprise plans. Authentication-gated embeds (login required to view) are Enterprise only — [contact sales](https://felt.com/sales) for details.

</details>

<details>

<summary>What can I customize in my embedded map?</summary>

You can:

* Add your company logo/name
* Customize the color bar
* Show/hide UI components, such as the Legend
* Adjust size using preset or custom dimensions
* Position the map view before embedding

</details>

<details>

<summary>What interactive features are available in embeds?</summary>

If dashboards and extensions like Bar charts, Measure, and Search are added to your map, they will also appear in the embed for viewers to interact with.

</details>

<details>

<summary>How can I share my embed?</summary>

There are two available options:

* **Embed**: Add an `<iframe>` snippet to include the map alongside other content on your page
* **Web page**: Share your branded embed as a standalone full web page using a Felt URL

</details>

<details>

<summary>How can I control who can access my embedded map?</summary>

You can secure embedded maps using two authentication methods:

**1. Token-based authentication**

* Access is limited by single-use authentication tokens generated via Felt's REST API
* Users can view without logging in
* If the token includes a user email, those users can also export data
* See developer documentation for implementation details

**2. User-based authentication**

* Access is limited to logged-in Felt users explicitly invited to the map
* Embedded views honor the same sharing permissions as the main map
* To configure: Set Public access to **None** in the Share menu and invite specific users by email (must match their Felt account email)

</details>

<details>

<summary>What view settings can I configure?</summary>

The View setting represents the default viewport - the center coordinates and zoom level when the map loads or refreshes. Pan and zoom in the embed preview to adjust these parameters.

</details>

<details>

<summary>What is the default zoom behavior?</summary>

By default, zooming requires a modifier key (like holding cmd while scrolling). You can change this to hook into standard **On scroll** behaviors on your website.

</details>


# Integrations

Connect with other tools to streamline mapping workflows.

## oEmbed API

Felt supports [oEmbed](https://oembed.com/), a standardized way of allowing rich embeds on third party sites like Notion or WordPress.

To achieve this, every map contains a line like this in the header following the standard oEmbed protocol:

```jsx
<link rel="alternate" type="application/json+oembed" title="Global Human Settlement" href="https://felt.com/oembed?format=json&amp;url=https%3A%2F%2Ffelt.com%2Fembed%2Fmap%2FGlobal-Human-Settlement-5FzbIDg4RA9B5XnhuPnGgzC">
```

That line contains a link with the form `https://felt.com/oembed?format=json&url={FELT_MAP_URL}` which, when followed, returns a standard oEmbed response that can be used to embed the map in a page in the proper way:

```jsx
{
  "type": "rich",
  "version": "1.0",
  "title": "Global Human Settlement",
  "html": "<iframe width="800" height="600" frameborder="0" title="Global Human Settlement" src="https: //felt.com/embed/map/Global-Human-Settlement-5FzbIDg4RA9B5XnhuPnGgzC"></iframe>",
  "referer": "",
  "thumbnail_url": "https://d3a9fdbxbk3c9v.cloudfront.net/33fd3fdf-0e6d-49b3-83a4-a504d082668c.jpg",
  "cache_age": 3600,
  "provider_name": "Felt",
  "provider_resource": "https://felt.com/embed/map/Global-Human-Settlement-5FzbIDg4RA9B5XnhuPnGgzC",
  "provider_url": "https://felt.com",
  "thumbnail_height": 165,
  "thumbnail_width": 220
}
```

## PowerBI

Felt simplifies the process of integrating maps onto Power BI reports. Felt supports a variety of map formats, ensuring compatibility with Power BI. It also allows you to add layers, markers, and popups to your maps, providing a richer and more interactive experience for the end user.

From your Felt map:

* Navigate to **File > Embed > Copy code**
* Add this code as a column in your data.

In Power BI:

* Go to **Get more visuals** in the Visualization menu
* Add the HTML Content App
* Add a HTML Content visual to your map
* Select the column that contains your Felt map iFrame code


# Duplicating a map

Create map templates and variations by duplicating existing maps.

The best seed for a successful map is another map. Whether you’re making a template for your students or exploring different scenarios with coworkers, duplicating a map makes a copy that you can modify.

### How to duplicate a map

{% hint style="info" %}
Whoever duplicates the map becomes the owner of the copy.

Duplicating a map within a Project will create the copy in the same project. Otherwise, the copied map goes to your Drafts folder. See [Workspaces and projects](/administration/workspaces-and-projects) to learn more.
{% endhint %}

When viewing the map, click on the **Felt** menu (top-left corner), then **File** > **Duplicate Map**.

<figure><img src="/files/4mFEbo9qMOtphuLguZ8o" alt="" width="375"><figcaption><p>Duplicate in the same workspace</p></figcaption></figure>

<figure><img src="/files/pmbHbnBaTObXE1wVwNGl" alt="" width="375"><figcaption><p>Duplicate to a different workspace</p></figcaption></figure>

You can also duplicate maps from the home page from the overflow **...** menu:

<figure><img src="/files/hooKiuXkRAzEFSFS00WG" alt=""><figcaption></figcaption></figure>

### Disabling map duplication

By default, maps can be duplicated by anyone with View permission. You can turn off map duplication via the **Duplicate map and data** toggle found within Map settings (the gear icon in the editor toolbar).

{% embed url="<https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmRfGitkyjOEMvVsEyGWN%2Fuploads%2F3vDlg9fZouRRtswd81LH%2FScreen_Recording_2024-12-16_at_2.25.35_PM.mp4?alt=media&token=0149b098-a79e-41f3-90c3-dd4de17ee86b>" %}


# Exporting


# Exporting data

Export map layers from Felt as CSV, GeoPackage, GeoJSON, Shapefile, KML, or GeoParquet for spreadsheets, GIS, Google Earth, and data warehouses.

Felt makes it easy to get your data back out. Any layer on your map can be exported in the format your workflow needs — a spreadsheet, a desktop GIS project, Google Earth, or your data warehouse — so your data is never locked in.

## Exporting layers

Layers can be downloaded via the overflow (three-dot) menu from the legend or by right-clicking on a layer. Available on Professional and Enterprise plans.

You can export vector layers as CSV, GeoPackage, GeoJSON, Shapefile, KML, or GeoParquet, and raster layers as GeoTIFF.

{% hint style="info" %}
On Enterprise plans, Viewers can export data too. On the Professional plan, only members with a Full Access seat can export.
{% endhint %}

#### What happens when you export

* Small exports download immediately to your local downloads.
* Large exports are prepared in the background — you'll receive an email with a download link when they're ready.

## Choosing a format

Not sure which format to pick? This chooser covers the most common cases.

| Format     | Best for                            | Watch out for                            |
| ---------- | ----------------------------------- | ---------------------------------------- |
| CSV        | Tabular data, point layers          | No geometry (points get lon/lat columns) |
| GeoPackage | General-purpose GIS, large datasets | —                                        |
| GeoJSON    | Web / lightweight interchange       | —                                        |
| Shapefile  | Legacy GIS / ArcGIS workflows       | 10-character column names, 2 GB cap      |
| KML        | Google Earth                        | 500k-feature cap, reserved-name renames  |
| GeoParquet | DuckDB / warehouses / data science  | Needs a GeoParquet-aware reader          |

## Format details

Most exports just work. A few formats have specifics worth knowing before you rely on them.

#### Shapefile

Shapefile exports download as a `.zip` containing the full sidecar set — `.shp`, `.shx`, `.dbf`, and `.prj` — reprojected to WGS84 (EPSG:4326). Exports are verified against QGIS and ArcGIS Pro.

{% hint style="warning" %}
Shapefile truncates column names to 10 characters — a hard ESRI Shapefile limit. Columns whose names collide after truncation are renamed automatically, and the change is logged. If your layer has long or similar column names, check the field names in the exported `.dbf` before relying on them.
{% endhint %}

Each `.shp` and `.dbf` component is capped at 2 GB. Larger exports fail with an error rather than producing a corrupt file — use GeoPackage or GeoParquet for big datasets.

#### KML

KML exports open in Google Earth (web and desktop) with geometry placed correctly; attributes are written as ExtendedData.

{% hint style="info" %}
Reserved KML column names are renamed automatically so Google Earth doesn't silently repurpose them — for example, a column named `description` is exported as `description 2`, with its values intact. The reserved names are: `id`, `name`, `description`, `snippet`, `timestamp`, `begin`, `end`, `altitudemode`, `tessellate`, `extrude`, `visibility`, `draworder`, and `icon`.
{% endhint %}

KML is built in memory, so exports are capped at 500,000 features. Larger exports fail fast with a clear error — use GeoPackage or GeoParquet instead.

#### GeoParquet

Felt exports true GeoParquet — with the `geo` metadata block, not plain Parquet — so the output is readable by DuckDB (with the `spatial` extension), geopandas, QGIS 3.28+, and data warehouses. GeoParquet is aimed at the modern data stack and complements Felt's ability to import GeoParquet.

## Exporting annotations

You can download individual annotations using the overflow (three-dot) menu or by using the right-click menu.

Export your map annotations as GeoJSON from the top-left menu **Felt > File**

* You can export all annotations with **Export all annotations**
* Alternatively, you can export only selected annotations with **Export selected**

<figure><img src="/files/Fdb83CAfCxUGfxXNzGsi" alt="" width="375"><figcaption></figcaption></figure>

**Types of annotations that can be exported**

* ✅ Pins, lines, polygons, routes, circles, marker, highlighter and notes
* ❌ Images, videos, links and text

## Exporting via API

Need to export data programmatically? Use the Felt API — you can find the [docs here](https://developers.felt.com).

To allow viewers to download data from an iframe or embed context, see the **Enabling Layer Export** section in our [developer docs](https://developers.felt.com/rest-api/api-reference/embed-tokens).


# PDF & images

Generate high-quality map PDFs and images for presentations.

{% embed url="<https://www.youtube.com/watch?v=uvSnQintaw4>" %}

Export your current map view as an image or PDF from the Felt Menu (**Felt > File > Export view\...**)

<figure><img src="/files/y2LgOKEVTEDFhZWyAKbY" alt="" width="375"><figcaption></figcaption></figure>

* You can choose whether to include the legend or not
* The high-resolution export will include your scale-bar and a **Made with Felt** banner.


# Seats

How seats work in Felt — Full Access seats, Viewer seats, and how they relate to permissions.

Felt uses a simple seat model: **Full Access seats** for people who create and edit, and **Viewer seats** for everyone else. Seats set the ceiling on what someone can do in your workspace; [permissions](/administration/felt-permissions) determine what they can do on a specific project, map, or data source.

## Seat types

<table data-header-hidden><thead><tr><th width="180"></th><th></th></tr></thead><tbody><tr><td><strong>Full Access</strong></td><td>Required to create maps, upload data, edit layers, or contribute changes. 10 Full Access seats are included on the Professional plan. Enterprise plans scale to your organization.</td></tr><tr><td><strong>Viewer</strong></td><td>Free. Viewers can open maps shared with them, browse data, and read comments. They can't edit, upload, or create maps.</td></tr></tbody></table>

## Seats vs. permissions

Seats are workspace-level. Permissions are granular and apply to a specific project, map, or data source.

* **Seat** = "Do you have a paid seat in this workspace?" (Full Access or Viewer)
* **Permission** = "What can you do on this specific project / map / data source?" (View, Contribute, Edit, or Admin)

A Full Access seat can be granted **any** permission level. For example, an analyst with a Full Access seat might have **Edit** access on the Operations project but **View** access on the Marketing project. The seat is the ceiling; permissions decide where they sit beneath it.

For the full permission matrix — what each permission level can do at the workspace, project, map, and data source level — see [Permissions](/administration/felt-permissions).

## Admin access

Admin is granted on top of a Full Access seat. Admins manage workspace settings, members, and billing. There must always be at least one Admin in the workspace.

## Switching a member’s seat

Workspace Admins can change member seats on the [members page](https://felt.com/maps/latest/members). For step-by-step instructions on inviting members and assigning seats, see [Managing members](/administration/managing-members).

## Commenting

Posting comments requires a Full Access seat — any member with a Full Access seat can comment, even on maps where they only have View permission. Viewer seats can read comments on maps they're shared with but can't post them. *(Workspaces on some legacy plans still allow Viewer seats to comment; if yours is one, nothing changes for you.)*


# Permissions

Reference page listing out all permissions per role

## Introduction to permissions

Anyone invited to a Felt workspace is considered a member of that workspace. Every member has a **seat** (set at the workspace level) and a **permission role** on each project, map, or data source they have access to. For details on the seat model, see [Seats](/administration/licenses).

Felt permissions can be broken out into the following categories:

* **Workspace settings:** Managing the workspace, members, and billing
* **Project-level settings:** Creating and managing projects and folders
* **Map settings:** Viewing and editing map content
* **Map management:** Managing map access and permissions
* **Data source settings:** Managing access to and contents of Felt Servers, Cloud sources, and Raster infrastructure sources

This page outlines which seat and permission roles have access to features according to these categories.

#### Key things to know

* Only members with a Full Access seat can be granted Admin access. Admins have full access to workspace settings, billing, and managing members.
* There must be at least one Admin in the workspace at all times.
* You can rotate or swap seats across members in the workspace when [managing members](http://felt.com/maps/latest/members).
* Some permissions (marked *enterprise* below) require features that are only available on Enterprise plans.

#### Seats vs permissions

The seat type sets the *ceiling* on what a member can do in the workspace. Permissions determine what they can do on a specific project, map, or data source.

In the [members page](http://felt.com/maps/latest/members), seats are managed in the far-right column. This column counts toward the seat allotment in your plan. Admin access is granted via this dropdown menu as well.

<figure><img src="/files/7kEWRc8dKl6lsdHqpsWC" alt="" width="237"><figcaption></figcaption></figure>

Permissions are managed separately and can be specific to a **project**, a **map**, or a **data source** in the workspace. For example: a member with a Full Access seat can have Contribute permission on specific projects, View permission on specific maps, and Source admin / Edit / View on specific Felt Servers, Cloud sources, or Raster infrastructure sources.

<figure><img src="/files/aot6tnJUawBBXDBvSriE" alt="" width="375"><figcaption></figcaption></figure>

***

## Workspace-level permissions

The permission tables below describe what each **permission role** (View, Contribute, Edit, Admin) can do at the workspace, project, map, and data source level. A Full Access seat can be granted any permission role; a Viewer seat is capped at View.

<table><thead><tr><th width="259.6640625">Permission</th><th>View</th><th>Contribute</th><th>Edit</th><th>Admin</th></tr></thead><tbody><tr><td>Leave workspace</td><td>✅</td><td>✅</td><td>✅</td><td>✅</td></tr><tr><td>Create a Felt Server</td><td>❌</td><td>❌</td><td>✅</td><td>✅</td></tr><tr><td>Connect a Cloud or Raster source</td><td>❌</td><td>❌</td><td>✅</td><td>✅</td></tr><tr><td>Publish to a Felt Server (where granted Edit+)</td><td>❌</td><td>❌</td><td>✅</td><td>✅</td></tr><tr><td>Create projects</td><td>❌</td><td>❌</td><td>✅</td><td>✅</td></tr><tr><td>Create/remove API tokens</td><td>❌</td><td>❌</td><td>✅</td><td>✅</td></tr><tr><td>See layer limit warnings</td><td>❌</td><td>❌</td><td>✅</td><td>✅</td></tr><tr><td>See payment failure warnings</td><td>❌</td><td>❌</td><td>✅</td><td>✅</td></tr><tr><td>Delete workspace</td><td>❌</td><td>❌</td><td>❌</td><td>✅</td></tr><tr><td>Rename workspace</td><td>❌</td><td>❌</td><td>❌</td><td>✅</td></tr><tr><td>Invite members</td><td>❌</td><td>❌</td><td>❌</td><td>✅</td></tr><tr><td>Remove members</td><td>❌</td><td>❌</td><td>❌</td><td>✅</td></tr><tr><td>Adjust member permissions</td><td>❌</td><td>❌</td><td>❌</td><td>✅</td></tr><tr><td>Manage billing/payments</td><td>❌</td><td>❌</td><td>❌</td><td>✅</td></tr><tr><td>View usage dashboard</td><td>❌</td><td>❌</td><td>❌</td><td>✅</td></tr></tbody></table>

{% hint style="info" %}
Whether a member can *see* a particular data source in the library is governed per-source, not at the workspace level. See [Data source-level permissions](#data-source-level-permissions) below.
{% endhint %}

## Project-level permissions

Assumes project access is granted.

<table><thead><tr><th width="259.98046875">Permission</th><th>View</th><th>Contribute</th><th>Edit</th><th>Admin</th></tr></thead><tbody><tr><td>View maps in project</td><td>✅</td><td>✅</td><td>✅</td><td>✅</td></tr><tr><td>Create maps</td><td>❌</td><td>❌</td><td>✅</td><td>✅</td></tr><tr><td>Delete maps</td><td>❌</td><td>❌</td><td>✅</td><td>✅</td></tr><tr><td>Move maps in/out of project</td><td>❌</td><td>❌</td><td>✅</td><td>✅</td></tr><tr><td>Create/rename/delete folders</td><td>❌</td><td>❌</td><td>✅</td><td>✅</td></tr><tr><td>Invite or remove non-admin members</td><td>❌</td><td>❌</td><td>✅</td><td>✅</td></tr><tr><td>Adjust non-admin member permissions</td><td>❌</td><td>❌</td><td>✅</td><td>✅</td></tr><tr><td>Rename the project</td><td>❌</td><td>❌</td><td>✅</td><td>✅</td></tr><tr><td>Invite or remove project admins</td><td>❌</td><td>❌</td><td>❌</td><td>✅</td></tr><tr><td>Change project visibility</td><td>❌</td><td>❌</td><td>❌</td><td>✅</td></tr><tr><td>Change the workspace-default access</td><td>❌</td><td>❌</td><td>❌</td><td>✅</td></tr><tr><td>Delete the project</td><td>❌</td><td>❌</td><td>❌</td><td>✅</td></tr></tbody></table>

## Map-level permissions

<table><thead><tr><th width="260.33984375">Map viewing permissions</th><th>View</th><th>Contribute</th><th>Edit</th></tr></thead><tbody><tr><td>Read comments</td><td>✅</td><td>✅</td><td>✅</td></tr><tr><td>Post comments<br><em>(requires Full Access seat)</em></td><td>✅</td><td>✅</td><td>✅</td></tr><tr><td>Search</td><td>✅</td><td>✅</td><td>✅</td></tr><tr><td>See live presence</td><td>✅</td><td>✅</td><td>✅</td></tr><tr><td>See live cursors</td><td>✅</td><td>✅</td><td>✅</td></tr><tr><td>View maps</td><td>✅</td><td>✅</td><td>✅</td></tr><tr><td>View table</td><td>✅</td><td>✅</td><td>✅</td></tr><tr><td>Toggle legend layers (for self)</td><td>✅</td><td>✅</td><td>✅</td></tr><tr><td>Attach photos to comments</td><td>❌</td><td>✅</td><td>✅</td></tr></tbody></table>

{% hint style="info" %}
The columns above describe what each permission level can do. **Viewer-seat members** (without a Full Access seat) are capped at View — they can read maps and read comments, but cannot post comments or edit.
{% endhint %}

<table><thead><tr><th width="259.7890625">Map editing &#x26; data management</th><th>View</th><th>Contribute</th><th>Edit</th></tr></thead><tbody><tr><td>Add/edit annotations</td><td>❌</td><td>✅</td><td>✅</td></tr><tr><td>Add images as annotations</td><td>❌</td><td>✅</td><td>✅</td></tr><tr><td>Attach photos to annotations</td><td>❌</td><td>✅</td><td>✅</td></tr><tr><td>Add/edit/delete data in layers</td><td>❌</td><td>✅</td><td>✅</td></tr><tr><td>Attach photos to features</td><td>❌</td><td>✅</td><td>✅</td></tr><tr><td>Create new layers from scratch</td><td>❌</td><td>❌</td><td>✅</td></tr><tr><td>Connect to data sources<br><em>(Cloud Sources are Enterprise)</em></td><td>❌</td><td>❌</td><td>✅</td></tr><tr><td>Delete map</td><td>❌</td><td>❌</td><td>✅</td></tr><tr><td>Delete layers</td><td>❌</td><td>❌</td><td>✅</td></tr><tr><td>Duplicate map</td><td>❌</td><td>❌</td><td>✅</td></tr><tr><td>Export data</td><td><em>*See note</em></td><td><em>*See note</em></td><td>✅</td></tr><tr><td>Publish to a Felt Server<br><em>(requires Edit or Source admin on the server)</em></td><td>❌</td><td>❌</td><td>✅</td></tr><tr><td>Rename map</td><td>❌</td><td>❌</td><td>✅</td></tr><tr><td>Set default layer visibility</td><td>❌</td><td>❌</td><td>✅</td></tr><tr><td>Spatial analysis</td><td>❌</td><td>❌</td><td>✅</td></tr><tr><td>Upload data</td><td>❌</td><td>❌</td><td>✅</td></tr></tbody></table>

{% hint style="info" %}
\*Note: By default, members with View or Contribute permission cannot export data from a map. They can export if the setting is enabled by an editor or admin in the [map settings](/dashboards-and-apps/map-settings#viewer-permissions).
{% endhint %}

## Map management

<table><thead><tr><th width="259.6796875">Permission</th><th>View</th><th>Contribute</th><th>Edit</th></tr></thead><tbody><tr><td>Adjust individual permissions</td><td>❌</td><td>❌</td><td>✅</td></tr><tr><td>Adjust public access settings</td><td>❌</td><td>❌</td><td>✅</td></tr><tr><td>Configure viewer permissions</td><td>❌</td><td>❌</td><td>✅</td></tr><tr><td>Invite members to map</td><td>❌</td><td>❌</td><td>✅</td></tr><tr><td>Remove individuals from map</td><td>❌</td><td>❌</td><td>✅</td></tr></tbody></table>

## Data source-level permissions

Felt Servers, Cloud sources, and Raster infrastructure sources have their own permissions, separate from the workspace seat. A member's role on a specific source is assigned via the **Share** dialog on that source — see [Sharing a data source](/sharing-and-collaboration/sharing-a-data-source) for the sharing workflow. The three roles are **Source admin**, **Edit**, and **View**.

{% hint style="info" %}
The Global Library is visible to every workspace and has no per-source permissions.
{% endhint %}

<table><thead><tr><th width="300">Permission</th><th>View</th><th>Edit</th><th>Source admin</th></tr></thead><tbody><tr><td>See layers from this source on a map</td><td>✅</td><td>✅</td><td>✅</td></tr><tr><td>See the source in the library</td><td>✅</td><td>✅</td><td>✅</td></tr><tr><td>Add a layer to a map</td><td>✅</td><td>✅</td><td>✅</td></tr><tr><td>Create folders in a Felt Server</td><td>❌</td><td>✅</td><td>✅</td></tr><tr><td>Publish a layer to a Felt Server</td><td>❌</td><td>✅</td><td>✅</td></tr><tr><td>Invite or remove non-admin members</td><td>❌</td><td>✅</td><td>✅</td></tr><tr><td>Edit connection details</td><td>❌</td><td>✅</td><td>✅</td></tr><tr><td>Delete or rename the source</td><td>❌</td><td>✅</td><td>✅</td></tr><tr><td>Invite or remove Source admins</td><td>❌</td><td>❌</td><td>✅</td></tr><tr><td>Change the workspace-default access</td><td>❌</td><td>❌</td><td>✅</td></tr></tbody></table>


# Workspaces and projects

Manage team workspaces and organize collaborative mapping projects.

{% embed url="<https://www.youtube.com/watch?v=qVcy9hnRImk&list=PLulpFBGeM9D56pqKcZYKOb_r10ax0Vzhy&index=7>" %}

{% hint style="info" %}
This doc is for Workspace Admin
{% endhint %}

## Definitions and concepts

<table><thead><tr><th width="160">Concept</th><th>Definition</th></tr></thead><tbody><tr><td>Workspace</td><td>The main place where all of your maps and data live.</td></tr><tr><td>Project</td><td>A subset of maps within the workspace. Can be public (open to all members in the workspace) or private (invite only)</td></tr><tr><td>Recent</td><td><p>Lists all the maps you have recently viewed or edited.</p><p>Can be filtered down to show: maps you own ("My Recent Maps"), maps that belong to the current workspace ("Recent in workspace"), or all recently viewed maps ("All recent maps").</p></td></tr><tr><td>Drafts</td><td>Lists the maps you created in this workspace that do not belong to any Project in the workspace. Unique and personal to each member with a Full Access seat.</td></tr><tr><td>Map</td><td>A map in Felt</td></tr><tr><td>Member</td><td>Anyone invited to your workspace. Members have one of two seat types: <strong>Full Access</strong> or <strong>Viewer</strong>. See <a href="/pages/I7atLGkuLhdBRwJZe5ui">licenses.md</a>.</td></tr><tr><td>Full Access seat</td><td>A paid seat required to create maps, upload data, edit layers, contribute changes, or post comments. Counts toward your seat allotment.</td></tr><tr><td>Viewer</td><td>An unlimited free seat. Can view maps shared with them and read comments. Cannot post comments or edit.</td></tr><tr><td>Permission</td><td>What a member can do on a specific project, map, or data source. Permissions include View, Contribute, Edit, and Admin. See <a href="/pages/4UxW7FiY1Cp1HfQtafHI">felt-permissions.md</a>.</td></tr><tr><td>Admin</td><td>A member with a Full Access seat and full access to manage workspace settings, members, billing, and the workspace's projects.</td></tr><tr><td>Project Admin</td><td>A member with a Full Access seat who has created or been granted Admin on a project, with permissions to manage that project. Scoped to specific projects.</td></tr></tbody></table>

## Workspaces

[Workspaces](/getting-started/your-workspace) serve as the primary place where organizations collaborate and share maps and data. Each workspace hosts its own maps and data sources. The workspace is also the billing entity in Felt.

You can create a new workspace and/or switch between different workspaces you belong to by clicking on the name of the workspace in the [Felt homepage](https://felt.com/maps)

<figure><img src="/files/8I0fR7BLQQCQlp85tLt7" alt="" width="181"><figcaption></figcaption></figure>

Workspace Admin can manage members, usage, billing, API tokens, and workspace-level settings in the Settings section of the workspace

<figure><img src="/files/L8GZZO7Mc2zNPx4PD6WY" alt=""><figcaption></figcaption></figure>

## Workspace settings

Settings for the workspace live here: <https://felt.com/maps/latest/settings>. In this section of Felt you can control settings at the workspace level.

Every workspace has access to the following settings:

* **Basics:** Workspace Name and Icon
* **Remove:** Leave or Delete the workspace

Enterprise workspaces have access to additional settings:

{% hint style="success" %}
The features below are only available to customers on the [Enterprise plan](https://felt.com/pricing). To upgrade, [contact sales](https://felt.com/sales).
{% endhint %}

* **Map Sharing**: Default public sharing settings

<figure><img src="/files/vm7lSSB5c9SUbe70C538" alt="" width="375"><figcaption></figcaption></figure>

* **Hosting Region**: Select a region to host your data in Felt
  * See [Regional hosting](/administration/regional-hosting) for more information

<figure><img src="/files/5vqXAPrAc4AtwDZaHpRp" alt="" width="375"><figcaption></figcaption></figure>

* **Joining the workspace:** Allow users with your company email domain to join the workspace automatically upon sign up, and control the default permissions

<figure><img src="/files/L49tRit0taWmix7ReafB" alt="" width="375"><figcaption></figcaption></figure>

* **Enterprise SSO**: Enable SSO login for your company's workspace
  * See [Single sign-on (SSO)](/administration/single-sign-on-sso) for more information

## Navigating the workspace

The navigation for a workspace is on the left-hand side when viewing [Felt App's Homepage](https://felt.com/).

<figure><img src="/files/5IlF4JkQ3z21LSUB27Xc" alt=""><figcaption></figcaption></figure>

### Recents

Maps in **Recents** show you all maps you’ve viewed and edited. They can be filtered down the following ways:

* My Recent Maps: shows you all the recently opened maps that you created
* Recent in workspace: shows you all the maps you view and edit in the current workspace
* All recent maps: shows you all the maps you view and edit, including public maps you view

### Drafts

**Drafts** hosts the maps you create in the workspace that do not belong to any Project yet; each member's **Drafts** space is their own. **Drafts** is a staging area for working on new maps you create and own. You can move maps within the workspace to a Project you have access to (see below).

You can invite collaborators to view a map in your Drafts, but they won't be able to see any other maps in your Drafts space.

### Moving Maps

You can move maps between Drafts and Projects in the workspace. You can also transfer a map from one workspace to another, which duplicates the map in the target workspace.

You can move a map when viewing a map in the workspace

<figure><img src="/files/NttamgpCiVgJm1WbNHU7" alt=""><figcaption></figcaption></figure>

or when viewing a map directly

<figure><img src="/files/FXklKm3R0wI7pDkekwU3" alt=""><figcaption></figcaption></figure>

#### Moving maps between workspaces

You can copy maps between workspaces in Felt. Doing this creates a duplicate copy of the original map into the other workspace. Everything on the map gets copied over to the new workspace except for comments. Also, the URL will be different in the copied map from the original map. Note: if the original map is embedded in a website, be sure to update the embed link.

To get the map into the other workspace, first make sure you are an editor in both your workspace and the other workspace. Then do the following:

1. Open the map
2. Click Felt menu (top left) > File > Move map...

   <figure><img src="/files/Rc8fYW4meSCzoBdJUKao" alt="" width="310"><figcaption></figcaption></figure>
3. In the modal select the target workspace (bottom left)

   <figure><img src="/files/bmvMAmmUh2dP5Y3Icoz8" alt="" width="211"><figcaption></figcaption></figure>
4. Select a target project in the new workspace
5. Click **Duplicate**

### Changing the Display

Felt provides different layout and order options for viewing all maps in any given Project. To see these options, click on the View dropdown on the top-right of any Project page

<figure><img src="/files/zb5atMIMKWFtrklMTekp" alt="" width="375"><figcaption></figcaption></figure>

## Projects

Workspaces are organized into Projects, which allow you to organize your maps into different spaces within the workspace.

By default all new workspaces start with a **General** Project. To add a new project, click **+ Create Project** on the [Felt home](https://felt.com/) view of the workspace

<figure><img src="/files/7AiYEAdgGbdCy6u6p6xV" alt="" width="277"><figcaption></figcaption></figure>

To rename any project, double-click on the name in the Project view.

<figure><img src="/files/ZzszBDSRMtDQZVJ1dS2Z" alt="" width="375"><figcaption></figcaption></figure>

### Sharing maps with Projects

To share maps between teammates, move maps into Projects in the workspace. Projects control which teammates have access to which maps.

Projects can either be Public (open to the entire workspace) or Private (invite only), which allow for finer access control within your organization. Members in the same workspace can access maps in public projects and maps in private projects they're invited to. Private projects show a lock icon next to the name. Only those invited to private Projects will see the Project listed.

Project visibility is configured when you create the Project, but you can switch the visibility later on by clicking on the **...** on any Project page.

<figure><img src="/files/aFw0B0HioZvaNTbQCWEZ" alt=""><figcaption></figcaption></figure>

In both public and private Projects, you can invite external collaborators or existing workspace members to specific projects. To invite collaborators to a Project, click on the Share button in the top right for any Project page.

#### Project permissions

You can fine-tune access to maps in a project by clicking on the **Share** button in the top right for any Project page.

The member who creates the project is by default made a Project Admin. Within each public project the Project Admin can set a default permission for all members accessing the project. The default permission for each project can be set as: View, Contribute, and Edit.

This default permission can override the member's workspace-level permission if the default permission grants a lower tier of access level than a member's workspace permission.

For example, if a public project's setting is set to **View**, every member's permission will be view in that project:

* Any member with a **Full Access seat** will see the project maps with **View** permission.
* Any member with a **Viewer seat** will see the project maps with **View** permission.

Project Admin can override the default permission setting by inviting members individually with custom permissions. This includes inviting other Project Admins for a single project.

### Project folders

In each project you can create folders to group a collection of maps. Folders organize maps within the same Project. Folders can also be nested.

**To create a folder**

Click on the target project and then click on the icon below in the top-right corner of the page

<figure><img src="/files/b3CPlkEHnI6lnWJel4H4" alt="" width="375"><figcaption></figcaption></figure>

**Moving Maps to Folders**

When moving any map you will see the folders nested under the project in the move modal:

<figure><img src="/files/6zPrwxfEMTQHxa6PdN8p" alt="" width="375"><figcaption></figcaption></figure>

Those invited to the project will have full access to maps in the folder. If you need to control access to maps, create a new project instead.

## Frequently asked questions

<details>

<summary>How do I delete a workspace?</summary>

You can delete workspaces in the settings: <https://felt.com/maps/latest/settings>

Scroll to the bottom and then click **Delete workspace**

</details>

<details>

<summary>Can I invite other Felt users to a Project even if they aren’t part of the workspace?</summary>

Yes, this is possible! You can invite collaborators to a specific Project by clicking the Share button when viewing the Project.

</details>

<details>

<summary>I work with different, external clients. How can I invite them to view only relevant maps?</summary>

Create separate projects to organize work with different clients so you can keep maps separate between clients. You can invite clients via email to a Project so they can view all maps within that project. Clients who are invited to a specific project cannot see any other projects or maps in the workspace.

</details>

<details>

<summary>How do I move my maps from one workspace to another?</summary>

You can copy maps between workspaces in Felt. To get the map into the other workspace, first make sure you are an editor in both your workspace and the other workspace. Then you can do the following:

1. Open the map
2. Click Felt menu (top left)
3. File
4. Move map... 1.

   ```
   <figure><img src="../.gitbook/assets/image (20).png" alt="" width="310"><figcaption></figcaption></figure>
   ```
5. In the modal select the target workspace (bottom left) 1.

   ```
   <figure><img src="../.gitbook/assets/image (21).png" alt="" width="211"><figcaption></figcaption></figure>
   ```
6. Select a target project
7. Click **Duplicate**

</details>

<details>

<summary>What is the General Project?</summary>

The General Project is a default public Project created for every workspace.

</details>

<details>

<summary>What do my recent maps show?</summary>

Recent lists all the maps in you have recently viewed or edited. Viewing all maps ("All recent maps") includes public maps you have viewed. This list can be filtered down to show:

* Only the maps you own ("My Recent Maps")
* Maps that belong to the current workspace ("Recent in workspace")

</details>

<details>

<summary>What are Drafts for?</summary>

Drafts list the maps you created in the current workspace that do not belong to any particular Project in the workspace yet. The Draft space is unique to each editor in the workspace.

Maps can moved from Drafts into projects that editor has access to, which will share visibility and access to everyone belonging to that Project.

</details>

<details>

<summary>Who can see maps that are in my Drafts?</summary>

**Only you can see maps in your drafts**, **even if you are in a shared workspace.** The only way someone could view a map in drafts is if you shared the map with them.

</details>

<details>

<summary>What’s the difference between Recents and Drafts?</summary>

Drafts only show maps you own and don’t belong to any projects yet. Recents show maps you have viewed and/or edited.

</details>

<details>

<summary>How can I change the name of the project?</summary>

Double-click on the name of the project to edit it.

</details>

<details>

<summary>How do I convert a public Project to private, and vice versa?</summary>

Navigate to the Project in Felt, click on the `...` in the top-right corner and select **Make Private** or **Make Public**

</details>

<details>

<summary>How do I delete my Felt account?</summary>

To delete your account, please reach out to <support@felt.com>

</details>

<details>

<summary>How do I change my account email address?</summary>

To switch or change the email address for your account, navigate to <https://felt.com/users/settings>.

1. Click on your email address (you may be prompted to set a password first)
2. Enter your new email address
3. Click the confirmation link in the email sent to the new email address

{% hint style="info" %}
Felt treats certain email variations as duplicates to prevent multiple accounts.
{% endhint %}

</details>


# Managing members

Add team members and assign appropriate roles and permissions in your workspace.

<figure><img src="/files/j4jRPO1acL3q02ro6Cn9" alt=""><figcaption></figcaption></figure>

## Workspaces and projects

Felt's [Workspaces and projects](/administration/workspaces-and-projects) allow organizations to manage their members, maps, and data in one place. Within a workspace you can create Projects for different teams and/or work projects. These Projects keep your maps organized.

{% hint style="info" %}
Are you an educator? Check out [For classrooms](/administration/for-classrooms) on setting up your classroom in Felt!
{% endhint %}

## Creating your first workspace

After [signing up for Felt](https://felt.com/signup) you will be prompted to create a new workspace or join an existing one.

1. If your organization is not already using Felt, **create a workspace** by clicking on the **Create a new workspace** button:
2. **Name the workspace** after your organization.
3. **Invite your coworkers** by adding their emails. Click **Send Invites**. You can also add them later by clicking **Invite members** in Felt homepage.

## Workspace permissions

{% hint style="info" %}
For a comprehensive understanding of permissions in Felt, see [Permissions](/administration/felt-permissions).
{% endhint %}

You can invite teammates with one of two seat types:

<table data-header-hidden><thead><tr><th width="140"></th><th></th></tr></thead><tbody><tr><td><strong>Full Access</strong></td><td>Required to create maps, upload data, edit layers, contribute changes, or post comments. Counts toward your seat allotment. The Professional plan includes 10 Full Access seats.</td></tr><tr><td><strong>Viewer</strong></td><td>Unlimited. Can view maps they're shared with and read comments. Cannot post comments or edit.</td></tr></tbody></table>

For details on seats and how they relate to permissions, see [Seats](/administration/licenses).

#### Key things to know

* Only members with a Full Access seat can be granted Admin access in the workspace. Admins have full access to workspace settings, billing, and managing members.
* There must be at least one Admin in the workspace at all times.
* You can change a member’s seat at any time on the [members page](http://felt.com/maps/latest/members).
* Some permissions require features only available on Enterprise plans — see [Permissions](/administration/felt-permissions).

{% hint style="info" %}
Want a deeper dive on what each permission role can do? See [Permissions](/administration/felt-permissions).
{% endhint %}

### Managing member permissions

In the [members page](http://felt.com/maps/latest/members), you can invite new members, change member seats, assign specific permissions, review member limits, or remove members from the workspace.

Seats are managed in the far-right column and set the highest level of permissions the member can have in the workspace. This column counts toward the seat allotment in your plan. Admin access is granted via this dropdown menu as well.

<figure><img src="/files/7kEWRc8dKl6lsdHqpsWC" alt="" width="237"><figcaption></figcaption></figure>

Permissions can be managed separately and can be applied specifically to a project, map, or data source in the workspace. A member's permission on a specific resource can differ from the workspace default, but a Viewer seat can never have more than View permission. This gives you flexibility to mix permission levels across your team — for example, a member with a Full Access seat can have Contribute permission on specific projects or View permission on specific maps.

<figure><img src="/files/aot6tnJUawBBXDBvSriE" alt="" width="375"><figcaption></figcaption></figure>

External collaborators who are only invited to specific maps, projects, or data sources will have no workspace-level permission. This means they will not be able to automatically view public projects or draft maps shared with other workspace members.

### Default permissions in Projects

To ensure members have access to the right maps, move maps into Projects in the workspace. Projects control which teammates have access to which maps, and Projects can be set to public (to everyone in the workspace) or private. Members in the same workspace can access maps in public projects and maps in private projects they're invited to.

The Project Admin can control member access and permissions on maps within a project using a default permission setting that is available within each Project's **Share** settings menu.

Within each public project, the Project Admin sets a default permission for all members with access to the project. The default permission for each project can be set as: View, Contribute, and Edit.

{% hint style="success" %}
To have every member have their same workspace permissions in the project, set the default permission setting to Edit
{% endhint %}

This default permission overrides the members' workspace permissions if the permission sets a lower access level than a member's workspace permission. But a default permission cannot grant a workspace member more permissions in a project than they have in the workspace.

For example, if a project's default permission setting is set to **View**, every member's permission will have view permission in that project:

* Any member with a **Full Access seat** will see the project maps with **View** permission.
* Any member with a **Viewer seat** will see the project maps with **View** permission.

<table><thead><tr><th width="180" align="center">Project Permission Setting</th><th width="220">Full Access seat</th><th>Viewer</th></tr></thead><tbody><tr><td align="center"><strong>View</strong></td><td>View</td><td>View</td></tr><tr><td align="center"><strong>Contribute</strong></td><td>Contribute</td><td>View</td></tr><tr><td align="center"><mark style="color:$primary;"><strong>Edit</strong></mark></td><td>Edit</td><td>View</td></tr></tbody></table>

#### For private projects

Only workspace members invited to the private project can see the maps in the project. When inviting a member to the private project, their permission level must match or be below the level set by their seat (Viewers are capped at View).

#### Invite external collaborators

You can also invite external collaborators or existing workspace members to specific projects and maps. External collaborators can only see maps they’ve been invited to.

## Manage email settings

To switch or change the email address for your account, navigate to <https://felt.com/users/settings>.

1. Click on your email address (you may be prompted to set a password first)
2. Enter your new email address
3. Click the confirmation link in the email sent to the new email address

{% hint style="info" %}
Felt treats certain email variations as duplicates to prevent multiple accounts.
{% endhint %}

## Removing a member

When you remove a member from the workspace, the following happens:

* The removed member is no longer able to log in and access the workspace
* The removed member's Draft maps are transferred ownership to the admin who removed them
  * These drafts appear in a private project accessible to the admin
* Any private projects that are only accessible to the removed member are transferred ownership to the admin who removed them
* All maps created by the removed member transfer ownership to the admin who removed them
* All maps belonging to public projects and folders created by the removed member remain in their original place

## Organize your maps

**Create projects within the workspace to organize your maps** for different teams and/or work projects.

Create a new project by clicking **+ Create Project** when viewing your workspace

* **Public** projects — all members in the workspace automatically join
* **Private** projects — invite-only and only seen by those invited

### Moving maps

You can **move maps or migrate maps to different projects in the workspace a few ways**

* When viewing a map:
  * Click on the current Project next to the map title → select the target Project
  * Click Felt menu → File → Move map...

<figure><img src="/files/hd5UbrqAxxZYRJcftK7D" alt=""><figcaption></figcaption></figure>

* When viewing your workspace: click on the **...** → select move → select the target Project

<figure><img src="/files/NttamgpCiVgJm1WbNHU7" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
Maps can only be duplicated across workspaces. The original map will remain in the original workspace. Once duplicated to the new workspace you can delete the original map in the older workspace.
{% endhint %}

### Map folders

Within each project you can **create folders to organize maps within the same project**. You can create a new folder when viewing your project page. Folders can be nested.

<figure><img src="/files/anHpDXMH1KEZBvJtenwi" alt=""><figcaption></figcaption></figure>

## Organize your data

To learn more about managing your data with Felt, see [Data sources](/data-sources/data-sources).

Publish data to a **Felt Server** within your workspace so your teammates have access to your organization's critical datasets. A Felt Server is a shared catalog of reusable map layers. Managing datasets in a Felt Server means every new map gets the same data styled the same way, without repeat uploads.

For more information, see [Felt Servers](/data-sources/felt-servers).


# Logging in

How to log in to Felt on desktop and in the Field App, and how to make sure you land in the right workspace.

Your Felt **account** is your personal identity, tied to your email address, and it can belong to more than one **workspace** — the shared space where your team's maps and data live. You log in once with your account, then open the workspace you want to work in. If your company already uses Felt, you almost always want to join your team's existing workspace rather than create a new one.

## Log in on desktop

Go to [felt.com/login](https://felt.com/login) and enter your email. Felt routes you to the right method automatically based on your account:

* **Password** — if your account has a password, enter it.
* **Sign in with Google** — if your account uses Google, continue with Google.
* **Single sign-on (SSO)** — if your organization uses SSO, you're sent to your identity provider (Okta, Google, Entra, and others) to log in.

You don't pick the method up front. Entering your email tells Felt which one your account uses.

{% hint style="info" %}
New to Felt? [Create an account](https://felt.com/signup) first. After signing up, you'll confirm your email address, then be prompted to create a new workspace or join an existing one.
{% endhint %}

## Land in the right workspace

If your team already uses Felt, join their workspace instead of creating a new, empty one:

* If your organization uses **SSO** or **email-domain joining**, logging in with your work email adds you to your company's workspace automatically.
* If you were **invited**, open the invitation link from your email and it places you in the right workspace.
* You can move between workspaces anytime from the workspace switcher in the left sidebar. The **Create workspace** option there starts a brand-new, separate workspace — only use it if you genuinely want a new one.

{% hint style="warning" %}
Creating a new workspace makes an empty space that's separate from your team's. If you can't see your team's maps after logging in, you're probably in a workspace of your own by mistake — switch workspaces from the sidebar rather than creating another one.
{% endhint %}

Admins setting this up should see [Single sign-on (SSO)](/administration/single-sign-on-sso) and [Managing members](/administration/managing-members).

## Log in in the Field App

The Field App is Felt's mobile app for iOS and Android. Logging in works the same email-first way as desktop:

1. Download and open the app. You're prompted to log in on launch.
2. Enter your email. Felt routes you to your password, Sign in with Google, or SSO — the same options as desktop.

{% hint style="info" %}
You can't create a Felt account in the Field App. [Create one on desktop](https://felt.com/signup) first, or ask your workspace admin to invite you. If you tap a link to create an account on mobile, it opens in your browser so you can finish there.
{% endhint %}

Once you're logged in, the Field App uses the same workspaces as your account. For a full walkthrough, see [Getting started](/field-app/getting-started).

## Troubleshooting

**Confirm your email address.** New accounts must click the confirmation link Felt emails you before logging in. If it didn't arrive, request a new one from the login screen. Confirmation links expire and can only be used once.

**Forgot your password.** Use **Forgot password?** on the login screen to reset it. If your workspace requires SSO, you log in through your provider instead and won't have a Felt password to reset.

**"This account uses Google."** If you signed up with Google, use **Sign in with Google** to log in. To add a password as well, reset your password from the login screen.

**Account temporarily locked.** Too many failed login attempts lock the account for a short time. Wait a few minutes and try again, or reset your password.

**Two-factor authentication.** Felt doesn't have its own two-factor authentication. It comes from your Google account or your organization's SSO provider, so set it up there.

**Log out or switch account.** Log out from the left sidebar. To use a different account, log out and log back in with the other email address.


# Personal plan

Felt's free Personal plan — for personal mapping, never commercial use.

Personal is Felt's free plan for mapping that isn't your job — plan a thru-hike, a road trip, a where-we-ate-in-Lisbon map for friends. Unlimited maps, share with up to 22 Viewer seats, free forever.

{% hint style="warning" %}
Personal doesn't include uploading your own data files (Shapefile, GeoTIFF, CSV, GeoJSON, KML). It also can't be used for business of any kind — employer work, client projects, freelance, anything you sell or charge for. If either applies, you'll want [Professional](/administration/billing) or [Enterprise](https://felt.com/pricing).
{% endhint %}

## What's included

<table><thead><tr><th width="280">Feature</th><th>Personal</th></tr></thead><tbody><tr><td>Unlimited maps</td><td>✅</td></tr><tr><td>Viewers (workspace-wide)</td><td>Up to 22</td></tr><tr><td>Standard, satellite, dark, and light basemaps</td><td>✅</td></tr><tr><td>Annotations (pins, lines, polygons, notes, routes)</td><td>✅</td></tr><tr><td>Felt's Global Library (regional boundaries, census, imagery)</td><td>✅</td></tr><tr><td>Public and private sharing</td><td>✅</td></tr><tr><td>Real-time collaboration</td><td>✅</td></tr><tr><td>Read comments on maps</td><td>✅</td></tr><tr><td>Browser-based on Mac, Windows, Linux, ChromeOS</td><td>✅</td></tr></tbody></table>

## Get started

[Sign up for Felt](https://felt.com/signup) — no credit card required. New accounts start with a 7-day Professional trial; after that, your workspace moves to the Personal plan unless you upgrade.

For the full feature comparison and pricing details, see <https://felt.com/pricing>.


# For classrooms

Use this doc to set up your classroom on Felt and learn about key Felt resources for educators.

<figure><img src="/files/qcZkUjz87tQ9StUoGsUa" alt="" width="563"><figcaption></figcaption></figure>

## For educators

Maps are an important way to explore the world around us, revealing spatial relationship that would not otherwise be obvious. Creating & analyzing maps are important skills for all people to learn. For these reasons, **the Felt platform is free for classroom use**. Below are three steps you need to complete to get your classroom using Felt.

{% hint style="info" %}
**Create one workspace per class you teach.** Within each workspace you can create Projects, which keep maps separate for different units or even managing different group assignments.
{% endhint %}

## The education plan: what's included

The education plan gives you access to all features of Felt for free. This is a full suite to power your students to run robust spatial analysis and build compelling story maps. With an unlimited number of Full Access seats included, the education plan also includes powerful features such as:

* QGIS plugin integration
* Spatial analysis tools (Buffer, Clip, Joins)
* Powerful visualizations and styling options, including:
  * Categorical, numerical, heatmap, raster, and H3 visualizations
  * Zoom-based styling
  * Attribute table search and filtering
  * Custom icons and popup interactions
* Dashboard components (layer slider, time series, histograms, dynamic statistics, spatial filters, viewer tools, and more)
* Cloud data integrations and automatic data refreshes
  * Live SQL queries
* Full suite of [Felt's AI tools](/felt-ai/ai-assistant): [Extensions](/developer-platform/extensions), [popups](/developer-platform/custom-popups), and [SQL queries](/data-sources/cloud-sources/sql-queries)
* Raster Cloud Optimized GeoTIFF streaming (+ STAC support)
* REST API, Python Integration, and JS SDK (See [Developer Docs](https://developers.felt.com/) to learn more)
* Codeless map embeds

## Step 1. [Sign up for Felt](https://felt.com/signup) using your education email

Be sure to create a workspace for your classroom.

## Step 2. Fill out classroom form to qualify

Our verification process takes up to two weeks. You will receive an email confirmation from us when you are verified.

{% embed url="<https://docs.google.com/forms/d/e/1FAIpQLSdWVaz6EYMus2YW6RYHURcCNSeE6hUkLG1uY-TkNqdy-46H7g/viewform?usp=sf_link>" %}

## Step 3. [Invite your students](https://felt.com/maps/latest/members) to Felt

Go to the [members page](https://felt.com/maps/latest/members) to invite students and other faculty. Students should be invited with Full Access seats so they can create their own maps for the class.

{% hint style="info" %}
Tip: You can copy and paste a comma-separated list of their student emails to add them all at once and send the invitation at the same time.
{% endhint %}

## Resources

### For educators

All educators get full access to Felt's [Fundamentals of GIS](https://gisfundamentals.felt.com/) course materials and modules. We also provide an [example exercise](https://felt.com/blog/spatial-analysis-for-education) for teaching spatial analysis with Felt.

### For students

[Felt’s Youtube channel](https://www.youtube.com/@feltmaps) is constantly updated with educational videos on Felt features and includes how-tos on using Felt. Our [Help Center ](https://felt.com/help)is another resource to share. And finally, we have a [developer center](https://developers.felt.com/) for more technical units.

## Organize your class

{% hint style="info" %}
Create one workspace for each class so maps remain separate between different classes
{% endhint %}

1. Use your institution's email address so you can be verified as the Workspace Admin.
2. Add students with Full Access seats so they can create maps within the classroom workspace.
3. If you are teaching the class with another teacher or have TAs that need to manage the class workspace, add them as Admin so they have full permissions.

### Managing maps

{% hint style="info" %}
Check out [Workspaces and projects](/administration/workspaces-and-projects)to learn more
{% endhint %}

1. Students can submit their map via a single link! Sharing settings are accessible by clicking the **Share** button on the top-right corner of any map:
2. Use projects to organize the maps in your class.
   1. Use **Public projects** to organize maps, exercises, and different units for all students.
   2. Use **Private projects** to stage upcoming units and set up different groups for group project assignments.
3. Folders can be used to organize student maps within the same Project. Folders can be nested.
4. You can move maps or migrate maps to different projects in the workspace or copy them to a different workspace.
5. Students can duplicate maps, which can help students get started with template maps for different exercises or assignments.

### Permissions

As the workspace creator, you will be an Admin of the class by default. You can invite students, teacher assistants, or other teachers with the following seat types:

<table data-header-hidden><thead><tr><th width="140"></th><th></th></tr></thead><tbody><tr><td><strong>Viewer</strong></td><td>Can see team assets — shared maps, folders, library layers, and other team members. Can read comments but cannot post them. Unlimited.</td></tr><tr><td><strong>Full Access</strong></td><td>Can create, edit, and remove maps, folders, and library layers. Required to post comments and for students to do their own work.</td></tr></tbody></table>

Admin access is granted on top of a Full Access seat. Admins can manage team members and workspace settings. See [Seats](/administration/licenses) for details.

To manage permissions of your classroom, click on the name of your workspace and click **Invite members**

On this page you can invite new students as well as change permissions or remove students by using the Permissions column.

## Frequently asked questions

<details>

<summary>I just submitted the edu form. How long until I get verified? What happens next?</summary>

The verification process will take two weeks at most, but we aim to make this a faster turnaround.

Once verified you will receive an email from us in your inbox. After receiving that email you can [invite your students](https://felt.com/maps/latest/members) to the workspace in Felt.

</details>

<details>

<summary>Can I use Felt for free for my academic research?</summary>

While Felt is free for classroom use, Felt is not free for individual or academic research. For information on which plan is best for you see our [pricing page](https://felt.com/pricing).

</details>

<details>

<summary>What seats do my students get?</summary>

Students should be invited with Full Access seats so they can create and edit their own maps. The education plan includes unlimited Full Access seats for the duration of your class. For details on seats, see [Seats](/administration/licenses).

</details>

<details>

<summary>How long does free access last?</summary>

The education plan lasts for the duration of your class.

</details>

<details>

<summary>What happens after the class ends?</summary>

The maps will not be removed or deleted from the workspace, but you will lose edit access to the workspace and not be able to create new maps for that class.

</details>

<details>

<summary>Are there any age limit restrictions for Felt accounts?</summary>

Children over the age of 13 can use Felt in the United States, Belgium, Denmark, Portugal, Sweden and the United Kingdom, over the age of 14 in China, Spain, Bulgaria, Austria, Cyprus, Italy and Lithuania, over the age of 15 in Slovenia, Czech Republic, Greece and France and over the age of 18 in India, Colombia, Indonesia, Egypt and over 16 in all other countries. See [our terms](https://felt.com/terms) for more info.

</details>


# For nonprofits

Empowering nonprofits with accessible GIS technology. Join over 200 nonprofit organizations worldwide using Felt today.

## For nonprofits

At Felt, we believe powerful mapping tools shouldn't be limited when it comes to organizations working to create positive change. We're proud to offer a discounted nonprofit program. With Felt you can easily transform complex datasets into compelling, shareable maps to drive greater impact, reach broader audiences, and support advocacy efforts with clear, visual storytelling that resonates across communities, media, and stakeholders.

## What's included

**Verified U.S. 501(c)(3) nonprofits get 30% off Professional or Enterprise.**

You get the same Felt — full collaboration, unlimited Viewer seats, dashboards, the Field App, embedded maps, and support for every file format we offer. The discount applies to whichever tier fits your team.

* **Professional** — 10 Full Access seats, unlimited Viewer seats, 25 GB of data processing per month, 100,000 map views per month, all collaboration and visualization features.
* **Enterprise** — adds live cloud sources (Postgres, Snowflake, BigQuery, Databricks, S3), AI features and MCP, the REST API and JavaScript SDK, SSO/SAML, regional hosting, and dedicated support.

For a full feature comparison, see the [pricing page](https://felt.com/pricing).

{% hint style="info" %}
Questions? Reach out to our support team at <support@felt.com>.
{% endhint %}


# Single sign-on (SSO)

Implement secure authentication for your team.

Felt provides Single Sign-On (SSO) functionality for Enterprise workspaces. This enables IT to easily manage access through a single authentication source. Felt’s SSO is built upon the SAML 2.0 standard.

{% hint style="success" %}
This feature is only available on the Enterprise plan. [Contact sales](https://felt.com/sales) to upgrade.
{% endhint %}

## Requirements

* Your workspace is on the Enterprise plan
* You are an admin in your Felt workspace
* You have an Identity Provider (IdP) that supports SAML 2.0
* You are an admin in your Identity Provider

## Supported Identity Providers

* Okta
* Google
* Entra
* OneLogin
* JumpCloud
* Duo
* Rippling
* Generic SAML 2.0 capable provider

## Quick Overview

1. Enable SSO for your Enterprise workspace
2. Configure the SAML connection between Felt and your IdP
   * You’ll share 3 fields from your IdP with Felt
   * You’ll share 3 fields from Felt with your IdP
   * You’ll configure 3 SAML attributes to be shared with Felt
3. Configure your Felt Enterprise SSO settings

## Detailed Steps

* Navigate to your Felt workspace, click **Settings**, then **Workspace**
* Click **Enable SSO for yourdomain.com** under **Enterprise SSO**
* You’ll be asked to confirm that you have admin access inside your IdP. Click **Configure SAML**
* In the new tab that has been opened, select your Identity Provider
* You will be now guided through a series of steps to configure the SAML connection between Felt and your IdP. These steps may vary between Identity Providers, so follow the details provided in the guide.
  1. Create a SAML app inside your IdP
  2. Provide the 3 requested fields from your IdP
     1. `SAML 2.0 Endpoint`
     2. `Issuer URL / Entity ID`
     3. `Certificate`
  3. Enter the 3 provided fields into your IdP
     1. `ACS URL`
     2. `ACS URL Validator`
     3. `Audience (EntityID)`
  4. Configure the 3 required SAML attributes
     1. `email`
     2. `first_name`
     3. `last_name`
  5. You can skip Step 5, user role configuration is not used
* Click **Finish**
* Click **Test Connection** to confirm that the connection was successful
  * You may need to add your own user to the new SAML application inside your Identity Provider for this test to succeed.
* Click **Finish & go live**
* Close the configuration tab and go back to your Felt workspace settings
* You may now configure your Felt Enterprise SSO settings
  * **Require SSO login**
    * This setting requires that all users on your email domain must log in using SSO
    * Users will no longer be able to log in using a password if they already had one
    * Admin users are always exempt from this restriction
  * **Automatically invite new users**
    * When this setting is on, new users that log in to your email domain using SSO will be automatically invited to your workspace.
      * If you reach your seat limit, additional logins will create Felt user accounts, but they won’t be added to your workspace.
    * They will be invited at the **Default permission level** you have set in the **Joining the workspace** section
* Inside your IdP, assign users you wish to have Felt access to the new SAML application that was created. Only users you assign will be able to log in to Felt.

## Frequently asked questions

<details>

<summary>Can users on other email domains still access my workspace?</summary>

Yes. You can still invite users from different email domains to your workspace. This is true even if you enable **Require SSO login**. That setting only applies to users on your configured SSO email domain.

</details>

<details>

<summary>If I de-provision a user in my Identity Provider, will they automatically be removed from Felt?</summary>

No. Felt’s Enterprise SSO implementation supports SAML, which handles access, but not SCIM, which handles automatic provisioning. If you want to remove a user from Felt, you can manually remove them from your workspace, and their maps will be transferred to an Admin user.

</details>


# Regional hosting

Meet your organization's compliance requirements with regional data hosting options.

{% embed url="<https://www.youtube.com/watch?v=-0Krvkk7Srs>" %}

{% hint style="success" %}
This feature is only available on the Enterprise plan. [Contact sales](https://felt.com/sales) to upgrade.
{% endhint %}

## Overview

The Data Hosting feature of Felt allows you to control where in the world your data is hosted.

For businesses and organizations dealing with sensitive or regulated data, regional data hosting provides several key benefits:

* Regulatory Compliance: Many regions have data sovereignty laws requiring certain types of data to be stored within specific geographic boundaries. Regional Data Hosting allows users to comply with these regulations by keeping data within required areas.
* Reduced Latency: Storing data closer to where it's being accessed can significantly reduce latency. Users in a specific region can experience faster data access and improved application performance when their data is hosted nearby.

The available regions are:

| Region         | AWS Region               |
| -------------- | ------------------------ |
| United States  | US-West-2 (Oregon)       |
| European Union | EU-Central-1 (Frankfurt) |
| Australia      | AP-Southeast-2 (Sydney)  |
| United Kingdom | EU-West-2 (London)       |
| Canada         | CA-Central-1 (Montréal)  |

## How to enable

To specify a hosting region, Admins must navigate to [Workspace Settings](https://felt.com/maps/latest/settings) > Hosting Region and select the region from the dropdown menu.

<figure><img src="/files/UMTWxToRFogAXVcB07kk" alt="" width="375"><figcaption></figcaption></figure>

{% hint style="warning" %}
Changing your hosting region does not move data you’ve already uploaded to Felt.
{% endhint %}

## Regional data hosting

The following data is stored in the hosting region you choose.

* Data files
* Features
* Tiles
* Derived statistical information
* Transformed data
* Search indexes

User details—including subscriber and subscription records, item metadata, sharing settings, map annotations, and billing information—are stored and handled in the United States. Furthermore, location-based functionalities like geocoding, routing, and Global Library layers are processed in the United States.

## Data security at Felt

Felt adheres to strict privacy and safety regulations no matter where your data is located. Felt adheres to SOC 2 Type 2 compliance standards, ensuring the security, availability, and confidentiality of user data. Interested parties can reach out to <support@felt.com> to request a copy of our SOC 2 Type 2 report. You can also find more information on our security practices at <https://felt.com/security>

## Regional hosting via AWS at Felt

Felt uses AWS as its regional hosting partner. AWS is the world’s biggest cloud hosting provider, serving the world’s biggest companies and most demanding governments.

The AWS infrastructure consists of multiple, physically separate Availability Zones within each Region, offering enhanced fault tolerance and high availability. AWS Regions meet the highest levels of security, compliance, and data protection.

By using AWS, Felt inherits all these security and compliance features built by AWS and relied upon by the world's biggest companies, including most of the world's leading financial institutions. AWS’ multi-AZ design, with independent power, cooling, and physical security connected via redundant networks, provides Felt with a resilient and secure foundation for its operations.


# Self-hosted Felt

Felt can run in your own private cloud

With the self-hosted configuration, Felt runs as a single-tenant instance inside your AWS environment. Your maps, geospatial data, and user activity never leave your infrastructure, so Felt has no access to your data at rest or in transit within your network. Felt manages software updates and ongoing maintenance for your instance. You get the same Felt experience as the cloud product, with full control over where your data lives.

This deployment option allows organizations with strict security, compliance, or data privacy requirements to run Felt within their own infrastructure. Choosing Self-hosted Felt has the following benefits:

* **Your data stays in your environment** - All map data, uploads, and processing occur within your AWS account
* **Network isolation** - Felt operates in a private, isolated network that you control
* **Regional flexibility** - Deploy in the AWS region that meets your data residency requirements
* **Compliance ready** - Meet strict security and compliance requirements (CMMC, FedRAMP, etc.)

To get started with self-hosted Felt, reach out to our sales team to discuss your requirements: <https://felt.com/sales>.

{% hint style="success" %}
This feature is only available to customers on the [Enterprise plan](https://felt.com/pricing). To upgrade, [contact Sales](https://felt.com/sales).
{% endhint %}

## Key benefits

#### Data sovereignty

Your geographic data never leaves your AWS account. All processing, storage, and computation happens within your controlled environment. Choose the AWS region where your Self-hosted Felt instance operates to comply with data residency requirements or optimize performance for your users.

#### Network security

* Deploy within your existing VPC or let Felt create a dedicated one
* Control network ingress and egress with your security policies
* Integrate with your existing security infrastructure (firewalls, monitoring, etc.)

#### Compliance

Self-hosted Felt helps organizations meet requirements for:

* Government contracts requiring data isolation
* Industry regulations with strict data handling requirements
* Internal security policies mandating on-premises or private cloud deployment

#### GovCloud ready

GovCloud deployments are supported with a dedicated setup process. Contact your Felt account team for details.

## How it works

#### Architecture overview

A Self-hosted Felt instance includes:

1. **Application Layer** - The Felt web application running in AWS ECS
2. **Data Pipeline** - Processing infrastructure for handling map data uploads and transformations
3. **Database** - Managed PostgreSQL database for application data
4. **Storage** - S3 buckets for map assets and uploaded files
5. **AI Services** - Integration with AWS Bedrock for AI-powered features

#### Connectivity

Because you control the VPC it runs on, a Self-hosted Felt deployment can be configured with:

* **Public access** - Users access Felt through a custom domain with TLS encryption
* **Private access** - Restrict access to users within your corporate network via VPN or Direct Connect
* **Hybrid** - Combine public and private access based on your needs

#### Deployment options

**Option 1: Felt-managed VPC**

Felt creates and configures a dedicated VPC in your AWS account with all necessary networking components:

* Public and private subnets across multiple availability zones
* NAT Gateways for secure outbound connectivity
* Private endpoints for AWS services (S3, Bedrock, CloudWatch, etc.)

**Option 2: Bring your own VPC**

Deploy Felt into an existing VPC that your organization manages. This option requires:

* At least 2 availability zones
* Public subnets for load balancers
* Private subnets for application workloads

## Requirements

#### AWS account requirements

* An AWS account with administrator-level permissions for initial deployment
* Sufficient service quotas for ECS, Lambda, S3, and RDS
* AWS Bedrock access for AI features (Claude models)

#### For bring your own VPC

If using an existing VPC, you'll need to provide:

* Your VPC ID and CIDR range
* At least 2 Availability Zones
* At least 2 public subnet IDs
* At least 2 private subnet IDs

#### Domain and certificates

* A domain name for your Felt instance (e.g., `maps.yourcompany.com`) managed by Route53
* An AWS ACM certificate for TLS encryption

## Frequently asked questions

<details>

<summary>How do I get started?</summary>

This feature is only available to customers on the Enterprise plan. Reach out to our [sales team](https://felt.com/sales) to discuss your requirements.

</details>

<details>

<summary>With self-hosted, does Felt have access to my data?</summary>

No. Your maps, files, and geospatial data stay in your AWS account. Felt receives only aggregate usage metrics (user counts, storage totals, map view counts) during the daily license renewal. No map content or user data is transmitted.

</details>

<details>

<summary>Can I run self-hosted Felt in AWS GovCloud?</summary>

Yes. GovCloud deployments are supported with a dedicated setup process. Contact [Felt sales](https://felt.com/sales) for details.

</details>

<details>

<summary>How is self-hosted Felt different from the cloud product?</summary>

You get the same Felt features. The difference is where it runs: self-hosted Felt deploys in your AWS account, giving you control over data location, network policies, and access. Felt manages software updates and maintenance for your instance.

</details>

<details>

<summary>How does licensing work with Self-hosted Felt?</summary>

Your Self-hosted Felt instance communicates with Felt's licensing API to validate your subscription. This is the only outbound connection to Felt's infrastructure.

</details>

<details>

<summary>Can I restrict which users can access my Self-hosted Felt instance?</summary>

Yes. You control network access through your VPC's security groups and can integrate with your identity provider for authentication.

</details>

<details>

<summary>What AWS regions are supported?</summary>

Self-hosted Felt deployment supports most commercial AWS regions. Contact us for GovCloud availability.

</details>

<details>

<summary>How are updates handled?</summary>

Felt provides updated CloudFormation templates and Docker images. You control when updates are applied to your environment.

</details>

<details>

<summary>What about backups?</summary>

Database backups are handled through AWS RDS automated backups. You control retention policies and can configure cross-region replication if needed.

</details>


# Billing

Learn about Felt billing and usage for your organization.

## Billing plans

Felt offers straightforward pricing that scales with your organization. See our most current plans on the [pricing page](https://felt.com/pricing).

Felt has two paid plans: **Professional** and **Enterprise**.

* **Professional** — for teams. Includes 10 Full Access seats, unlimited Viewer seats, 25 GB of data processing per month, and 100,000 map views per month.
* **Enterprise** — custom pricing. Adds live cloud sources (Postgres, Snowflake, BigQuery, Databricks, S3), AI features and MCP, the REST API and JavaScript SDK, SSO/SAML, regional hosting, VPC deployment, and dedicated support.

When you sign up for Felt, you're automatically enrolled in a free 7-day trial of the Professional plan. AI is optional during the trial.

## Managing the trial

When you sign up for Felt you enroll in a 7-day free trial of the Professional plan. No credit card is required to sign up or start the trial.

During your trial, you have full access to Professional features, including [Upload Anything](/upload-anything/files), [dashboards](/dashboards-and-apps/components), the [Field App](/field-app/getting-started), and the [QGIS plugin](/upload-anything/qgis-plugin). AI features are optional during the trial — let us know if you want to try them.

After 7 days, your workspace automatically downgrades to the Personal plan.

<details>

<summary>What happens after my trial ends?</summary>

After 7 days, your workspace automatically downgrades to the Personal plan. If your maps are using paid features — uploaded data, Felt Layers, or other Professional/Enterprise capabilities — those layers will be watermarked with gray tiles. Your maps and data are preserved, but the Personal plan doesn't allow new data uploads or commercial use.

</details>

<details>

<summary>How do I upgrade after my trial?</summary>

You can upgrade to Felt's Professional plan at any time during or after your trial by visiting your [billing settings](https://felt.com/maps/latest/billing).

To upgrade to Felt's Enterprise plan, [contact sales](https://felt.com/sales).

</details>

<details>

<summary>Can I cancel my trial?</summary>

If you wish to cancel your trial before it expires or delete your account, please contact <support@felt.com> and our team will assist you.

</details>

## Managing billing

Billing is handled by the Felt team — email <support@felt.com> with any billing questions. Requests should come from a workspace Admin. We can help with:

* Subscribing to the Professional plan
* Reviewing and downloading invoices
* Updating your billing contact
* Updating the credit card on file
* Reviewing billing cycle and renewal dates
* Canceling your Professional subscription

## Frequently asked questions

<details>

<summary>How does billing work?</summary>

Felt operates on a subscription basis and each Felt workspace is billed independently.

There are three plans: Personal (free), Professional, and Enterprise. Felt is sold as an annual contract; there is no month-to-month billing for Professional or Enterprise. You can find details about the different plans [here](https://felt.com/pricing).

</details>

<details>

<summary>How do I manage payment for Felt? Who can access these settings?</summary>

Billing is handled through our team — email <support@felt.com> and we'll take care of it. Requests should come from a workspace Admin: Admins are the only teammates who can control billing and data usage in the workspace.

</details>

<details>

<summary>How do I delete my account?</summary>

If you wish to delete your account, please contact <support@felt.com> and our team will assist you.

</details>

<details>

<summary>Can I upload data on the Personal plan? Can I use Felt Layers on the Personal plan?</summary>

No, uploading data and using Felt Layers are not available on the Personal plan. This includes layers created from converting Felt annotations (formerly called "elements") and layers from hand-drawn annotations. To upload your own data, upgrade to Professional or Enterprise.

</details>

<details>

<summary>How do I view my workspace's data usage? Can I purchase more?</summary>

View your current data processing and map view usage by navigating to [Workspace settings → Usage](https://felt.com/maps/latest/usage).

Professional includes 25 GB of data processing and 100,000 map views per month. Enterprise scales to your organization. If you're approaching or exceeding your allotment, drop a note to our [sales team](https://felt.com/sales) — Felt doesn't auto-bill overages or throttle your maps.

</details>

<details>

<summary>How do I add more seats to my subscription?</summary>

The Professional plan includes 10 Full Access seats. To add more seats, email <support@felt.com>. For larger teams or custom seat agreements, [reach out](https://felt.com/sales) to our sales team about Enterprise.

For details on what a Full Access seat is and how it differs from a Viewer seat, see [Seats](/administration/licenses).

</details>

<details>

<summary>How is data processing measured? When does it reset?</summary>

Data limits are applied at the organizational level. Data processing is a monthly measure that resets on the first of every calendar month, and map views are counted per calendar month and reset at the same time. For a full explanation of how processing is measured and what counts toward it, see [Data processing](/administration/data-processing). View your current workspace usage under [Workspace settings → Usage](https://felt.com/maps/latest/usage).

</details>

<details>

<summary>How does Felt calculate data processing &#x26; hosting from URL sources like WMTS, Feature Servers, XYZ files?</summary>

Felt has logic to handle your sources like WMTS, Feature Servers and XYZ files. If they are pre-tiled, we point to the tile sources. However, if the source is not pre-tiled, we will process those tiles through a pipeline run and host them on your behalf.

</details>

<details>

<summary>What happens if I exceed my map views or processing?</summary>

Nothing dramatic. We'll reach out to talk about whether the next tier makes sense for your use. We don't auto-bill overages or throttle your maps — predictability is the point.

</details>

<details>

<summary>What is a member?</summary>

A member is anyone invited to your workspace. Every member has a seat — either **Full Access** or **Viewer** — and a permission role on each project, map, or data source.

* **Full Access** — required to create or edit maps, upload data, contribute changes, or post comments. Counts toward your seat allotment.
* **Viewer** — unlimited. Can view maps they're shared with and read comments, but cannot post comments or edit.

For details, see [Seats](/administration/licenses) and [Permissions](/administration/felt-permissions).

</details>

<details>

<summary>Is there an education plan?</summary>

Yes! Felt is free to use in the classroom.

To verify your classroom check out [For classrooms](/administration/for-classrooms).

</details>

<details>

<summary>Do you offer a non-profit discount?</summary>

Yes. Verified U.S. 501(c)(3) nonprofits get 30% off Professional or Enterprise. [Get verified](/administration/for-nonprofits) to access this offer.

</details>

<details>

<summary>What happens if I cancel my subscription?</summary>

You will lose access to the paid features in Felt at the end of the billing period and not be charged going forward. Your data remains safe and accessible: you can export your maps and data before your subscription ends to take your work with you.

Once the subscription is inactive your maps will be watermarked with gray tiles covering the data.

</details>

<details>

<summary>If I cancel Felt, can I take my data with me?</summary>

Yes. All your data is exportable to standard formats — Shapefile, GeoJSON, GeoPackage, GeoTIFF, CSV — at any time, on any plan. Live cloud-source data (Postgres, Snowflake, BigQuery, Databricks, S3) never moves out of your warehouse in the first place; Felt only reads it. There's no proprietary export-only format.

</details>

<details>

<summary>How many addresses can I upload to Felt from a spreadsheet?</summary>

By default, Felt will geocode address data for up to 10,000 addresses per upload. If you need a higher limit, [contact sales](https://felt.com/sales) to upgrade to our [Enterprise plan](https://felt.com/pricing).

</details>


# Data processing

How data processing is measured in Felt, what counts toward your monthly total, and how to stay within your plan's limits.

Data processing is how Felt measures the work of bringing your data onto a map — uploading a file, refreshing a layer, or running a spatial analysis. It's measured monthly and resets on the first of every calendar month, so it behaves more like bandwidth than a fixed allotment. You pay for what you actually process, with no surprise overage charges, and the monthly limits are generous enough that most teams rarely think about it.

When you add data to Felt, Felt tiles, indexes, and caches it so your maps stay fast and smooth even with very large datasets. This preparation work is powered by Felt's [Lightning](https://felt.com/blog/lightning-tiles) engine, and it's exactly what "processing" measures — the one-time effort of turning your raw data into fast, interactive map layers.

{% hint style="info" %}
This article explains how processing is measured and how to stay within your limit. For your plan's tier, price, and exact monthly allotment, see [Billing](/administration/billing).
{% endhint %}

## How processing is measured

Your monthly total is the sum of the processed size of every upload, refresh, and analysis during the month:

> **Processed size of the data × how many times you upload or refresh it that month.**

A layer's size is only counted when something happens to it, and only when a run **completes successfully** — a failed upload or refresh that errors out isn't counted. Felt measures the **uncompressed** size of the geodata, not the zipped file you started with, which is why the number Felt reports can differ from the file size on your computer. Just viewing, panning, or sharing a map never uses processing.

You can always see your current usage under [Workspace settings → Usage](https://felt.com/maps/latest/usage).

### What counts

* **Uploads** — adding a file, a spreadsheet, or a URL-based layer to a map.
* **Refreshes** — manually refreshing a layer, uploading a new version, or a scheduled live refresh pulling fresh data from a connected source.
* **Analysis outputs** — layers created with Felt's spatial analysis tools.

Behind-the-scenes reprocessing, or re-running a layer to change which columns are included, doesn't add to your total.

{% hint style="info" %}
**Data that streams directly into the browser doesn't count.** When a layer renders straight in the browser, Felt isn't tiling, indexing, or caching it on our side, so it doesn't consume processing. This covers streamed raster files (Cloud Optimized GeoTIFFs, or COGs) and any layer with the **Streaming Vector** option turned on.
{% endhint %}

## Reading the Data processing page

The Data processing page is a running record of usage for your current monthly cycle. It logs every time data gets processed and counts that against your monthly allowance. You'll find it under [Workspace settings → Usage](https://felt.com/maps/latest/usage).

<figure><img src="/files/stVqR2QlPW6BjEyOHyeR" alt="The Data processing page, showing a usage bar tracking GB used this month above a table of processing runs, with some rows labeled No maps."><figcaption><p>The Data processing page: the bar at the top tracks usage against your monthly allowance, and each row below is a single processing run dated to the day it ran. Rows for deleted maps show "No maps."</p></figcaption></figure>

Each row is a single processing run, dated to the day the processing actually happened — not the day a map was created or deleted. Reading the page top to bottom shows you exactly what drew down your allowance this month and when.

If a row shows **"No maps"**, it means the map that triggered that run has since been deleted, so the run is no longer linked to anything. The processing it used still counts for the month.

{% hint style="info" %}
**Deleting a map doesn't refund processing that already ran.** Once data has been processed, it has used part of your allowance for that day, so it stays on the record — even if the map is later deleted and the row shows "No maps." This is the map-level version of the layer note above: the work is already done, so it counts.
{% endhint %}

Usage resets at the start of each new monthly cycle, so what you see here won't carry over into the next month.

## Worked examples

Here's how a few common patterns add up over a 30-day month. Check your [usage page](https://felt.com/maps/latest/usage) for your exact allotment, and [Billing](/administration/billing) for current plans and limits.

| What you're doing                 | Processed size per run | Runs per month | Monthly processing |
| --------------------------------- | ---------------------- | -------------- | ------------------ |
| One-time upload of a 2 GB file    | 2 GB                   | 1              | **2 GB**           |
| 30 MB file refreshed 3× per day   | 30 MB                  | 90             | **\~2.7 GB**       |
| 250 MB file refreshed twice a day | 250 MB                 | 60             | **\~15 GB**        |
| 100 MB layer refreshed once a day | 100 MB                 | 30             | **3 GB**           |
| 500 MB dataset refreshed hourly   | 500 MB                 | \~720          | **\~360 GB**       |

The jump in the last row shows why refresh frequency matters most for large datasets: a small file refreshed often is cheap, but a large file refreshed often adds up quickly.

## How refreshing works

Felt refreshes are always a **full replace**: each refresh reprocesses the entire dataset rather than computing a difference, so it counts its full size toward processing, just like the original upload. There's no meaningful cost difference between refreshing via an uploaded file, the REST API, or a connected cloud source.

When many layers share the same underlying dataset, a single scheduled refresh of that dataset counts as **one** processing run, not one per layer — Felt refreshes the shared data once and updates every layer that depends on it.

{% hint style="success" %}
**Reuse a dataset across many maps without extra processing.** Add it once, turn refresh off, and publish it to your workspace library. The published layer is saved as tiles and can be added to any number of maps — and duplicated along with a map — with no additional processing.
{% endhint %}

## Cloud sources vs. live refreshes

Connecting a cloud source (like BigQuery, Snowflake, Postgres, or Databricks) involves two distinct activities, and only one uses processing:

* **Source sync** — about every 24 hours, Felt scans the source to keep the list of available tables and views current. This doesn't touch any map data, so it **does not** consume processing.
* **Live layer refresh** — when a layer pulls fresh data from the source on its set cadence, that's a real data refresh and **does** count, just like any other refresh.

In short: keeping the catalog in sync is free; pulling data into a map is what's measured. See [Refreshing data](/layers/refreshing-data) and the cloud sources [Cloud sources](/data-sources/cloud-sources#syncing-behaviors) for more detail.

## Notes for BigQuery, Databricks, and SQL queries

For layers built from a SQL query or a cloud warehouse table, there's no uploaded file to measure, so Felt **estimates** the processed size from the query — for example, BigQuery's dry-run estimate or Databricks' query cost statistics — rather than from a fixed file size.

Because the size comes from the query plan, a query that returns a lot of data — `SELECT *` against a large table, or a join that multiplies rows — is estimated as large, because the result really is large. Filtering and selecting only the columns and rows you need keeps both the result and the processing smaller. If a SQL layer reports a surprising size, refining the query usually brings it in line; if something still looks off, reach out to <support@felt.com>.

## Tips to stay within your limit

* **Match refresh cadence to how often the data actually changes.** Hourly refreshes on data that updates daily multiply your processing for no benefit.
* **Trim and filter large datasets** before bringing them in — fewer columns and rows mean less data processed on every refresh.
* **Avoid duplicate refreshes of the same layer.** A layer refreshed both on a schedule and by an automated job is effectively refreshed twice; pick one path.
* **Publish shared datasets to your workspace's data sources** so they're reused as tiles instead of reprocessed on every map.

{% hint style="info" %}
**Note:** Removing a layer doesn't refund the processing already used to bring it in. If you add a large dataset by mistake, it still counts for that month, even if you delete it right away.
{% endhint %}

## What happens when you reach your limit

Felt notifies you as you approach your limit (around 80%) and when you reach it (100%), so you're never caught off guard. If you do use up your monthly processing:

* **Your maps keep working.** Existing maps, layers, and dashboards continue to render and can be viewed and shared normally — you're never throttled on viewing.
* **New processing pauses.** New uploads, new layers, and refreshes are paused until your processing resets at the start of the next calendar month, or until you add more capacity.

If you need more headroom, [contact our team](https://felt.com/sales) and we'll help you find the right plan or capacity for your usage.

## Frequently asked questions

<details>

<summary>Why did my usage spike this month?</summary>

Spikes are almost always driven by automation — an automated job and a scheduled refresh both updating the same layer, a SQL query returning far more data than expected (like `SELECT *` on a large table), or many scheduled refreshes all firing at the start of the month. The [usage page](https://felt.com/maps/latest/usage) shows what's contributing, and slowing refresh cadence or tightening queries usually resolves it.

</details>

<details>

<summary>How often can I refresh a layer without running out of processing?</summary>

Because every refresh is a full replace that reprocesses the whole layer, your monthly usage for a layer is simply its size × how many times you refresh it that month. To sanity-check a schedule, multiply the layer's size by your planned refreshes per month and compare it to your [monthly allotment](https://felt.com/maps/latest/usage) — see [#worked-examples](#worked-examples "mention") for a few worked-out cases. If it's too high, the two levers are to refresh less often or to trim and filter the dataset so each run is smaller.

</details>

<details>

<summary>What if I need more processing than my plan includes?</summary>

You can add more processing capacity — see [Billing](/administration/billing) or [contact our team](https://felt.com/sales) and we'll help you find the right plan or capacity for your usage. Keep in mind the meter resets to zero on the first of every calendar month, so a one-time spike clears on its own without any action.

</details>

<details>

<summary>My Data processing page shows a row with "No maps" — what does that mean?</summary>

It means the map that triggered that processing run has since been deleted, so the run is no longer linked to a map. The processing it used still counted toward that month's allowance and isn't refunded — the data was already processed on that day. Like every other run, it clears at the next monthly reset.

</details>


# Security and privacy

Learn about Felt's security and privacy.

<figure><img src="/files/6aUkKX3nO9NFYThVGmCU" alt="" width="375"><figcaption></figcaption></figure>

Felt implements comprehensive security measures including encryption, multi-factor authentication, and SOC 2 Type 2 compliance to protect user data. All user content is stored on secure US-based servers with strict access controls for employees.

## Overview

* All Felt web traffic is encrypted via TLS.
* All Felt employees are required to use multi-factor authentication to access our internal systems, including our code and customer data.
* All Felt data is stored on servers based in the US.
* All Felt systems runs on public clouds such as AWS and Google Cloud.
* All user credentials are stored with encryption at rest — Felt can never see your password.
* All Felt web traffic is protected against DDoS attacks via Cloudflare.
* All Felt systems’ uptime are monitored 24/7 around the globe.
* Felt supports **Sign in with Google** on all plans, and SAML-based [Enterprise SSO](/administration/single-sign-on-sso) on the Enterprise plan.

## User data Felt collects and stores

| Data            | Note                             |
| --------------- | -------------------------------- |
| Email           | User provided and verified       |
| Name            | User provided                    |
| Profile picture | User provided                    |
| Password        | Encrypted in transit and at rest |

## How Felt treats user-generated content

* All user uploaded data such is stored on US servers.
* The full user uploaded data is only accessible to the original uploader and Felt employees.
  * Felt generates excerpts (100 row samples) and thumbnails of images and those can be seen on maps that have the data visualized in them.
* All Felt employees must use multi-factor authentication to access user generated content.
* User uploads such as data and images are stored in a format that makes it impossible to guess their addresses.

## Infrastructure and network security

### Physical access control

Felt is hosted on a combination Render and Amazon Web Services (AWS). Felt does not operate its own servers, nor do Felt employees have physical access to Render or AWS datacenters, servers, or storage.

#### Render

Render is a Platform as a Service provider. Felt uses Render’s services in its Oregon, US datacenter.

Render is independently audited for SOC2 compliant. All sensitive Felt data stored on Render is encrypted at rest.

#### Amazon Web Services (AWS)

AWS is the leading cloud provider used by enterprises and governments worldwide. Felt uses AWS’ services in its US datacenters. By using AWS, Felt inherits all the security and compliance features built by AWS and dependent upon the world’s biggest companies, including most of the world’s leading financial institutions.

### Logical access control

All Felt employees use designated accounts to access our infrastructure. Employees are not allowed to share access credentials. All access is further protected behind two-factor authentication. All private keys are stored with strong encryption. Access controls are monitored automatically every day and manually quarterly.

### Penetration testing

Felt employs annual penetration testing by an independent third-party. The third-party engages with the production instances of Felt service and are under contract.

Any findings from the penetration testing are investigated by Felt’s security team and prioritized accordingly. Penetration testing schedule is monitored automatically.

### Third-Party Audits

Both Render and AWS are rigorously audited by third-parties. Both Render and AWS boast SOC 2 Type 2 compliance as well as ISO 270001 certification.

Felt undergoes SOC2 compliance audits and have received its SOC2 Type 2 compliance.

### Intrusion prevention and detection

Felt aims to make unauthorized intrusion as hard as possible. All Felt compute instances both on AWS and Render run in their own virtual private networks. No Felt compute instance allows SSH access and all compute instances on AWS uses a Serverless infrastructure, meaning all instances are ephemeral and automatically killed when their task is complete or they reach their age-limit, currently set to 24 hours.

Furthermore, Felt uses AWS’s CloudTrail technology to monitor access to its services and Cloudtrail logs are further automatically monitored daily for unauthorized access.

## Business continuity and disaster recovery

### Provisioning

All parts of Felt's service are over-provisioned, meaning all non-transient services like compute instances and databases have a lot of extra capacity in case of a demand spike. Our compute platform on Render is automatically spread across different availability zones and our platform on AWS is automatically horizontally scalable via Amazon’s Serverless stack.

#### Business continuity planning (BCP)

All customer data is uploaded to AWS’ S3 service. Felt uses versioned controlled S3 buckets with 99.99% availability. All data that is stored on Render is backed up daily. Felt also runs annual business continuity recovery exercises and their schedule is monitored automatically.

#### Disaster recovery

All Felt data is uploaded to AWS’ S3 service and all Felt buckets are versioned controlled with no public access permissions. In the unlikely case of a disaster, Felt is able to recover the original data from S3 buckets.

## Data security and privacy

The security and the privacy of customer data is paramount to everything Felt.

#### Data encryption

All customer data uploaded to Felt is encrypted at transit and at rest. Customer data uploads from the browser happen over HTTPS via transport layer security (TLS) encrypted connections and the data is stored on versioned AWS S3 buckets that are server-side encrypted. The settings on these buckets are monitored daily automatically.

Application data that is stored on Render databases are also stored with encryption at rest. Felt never stores your password in cleartext.

All Felt web traffic happens over HTTPS and certificates are managed automatically via Render and Cloudflare. Felt’s HTTPS settings are monitored automatically.

#### Data access

Felt employees might access customer data only for documented reasons and for limited amount of time. All access happens via individual accounts tied to each employee and is logged for potential audits. Felt employees can store data on their systems for technical troubleshooting or customer support only for limited amount of time and only if their systems are end-to-end encrypted. Felt employees’ personal devices used for such access is monitored hourly automatically.

## Application security

### Sign in with Google

Felt allows users to log in via Google in lieu of a password. Logging in via Google allows users to benefit from Google’s world-class authentication safety features such as multi-factor authentication, passkey authentication and federated logins. Many Felt users integrate their federated login systems with Google, allowing them to have a Single Sign-On provider via Google.

### Personal access tokens

Felt allows users to create personal access tokens (PAT) to access Felt resources programmatically via application programming interfaces (API)s. PATs are stored with encryption on Felt databases and are exposed in cleartext only during creation. They are never logged. Users can revoke their PATs any time, or create multiple ones for various use-cases.

### Email security

Felt uses a strong domain-based message authentication, reporting, and conformance (DMARC) setup for its email. This makes spoofing (pretending to be Felt) or phishing scams much harder to employ. Felt’s DMARC settings are monitored automatically daily. For all domain name service setups, including DMARC, Felt uses AWS’ Route 53 service, inheriting the security and audit capabilities of AWS services.

### Secure software development lifecycle (SDLC)

#### Continuous delivery (CD)

Felt uses a continuous delivery methodology to deliver its software, meaning every single code change is delivered quickly to production. This allows quick resolution of customer issues, including security patches.

#### Continuous integration (CI)

Felt uses a continuous integration methodology to develop its software, meaning all code is continuously tested at each step of the progress. These tests include static analysis of our code against vulnerabilities, introduction of unexpected dependencies against supply-chain attacks, as well as unit and integration tests against bugs that might impact users and their security.

#### Version control

All Felt code is version controlled. Code changes must be requested via cryptographically verified methods and all code change must be approved by another person before it can be delivered to production via the CI/CD pipeline.

### Corporate security

#### Malware protection

All Felt provided computers are registered to our Mobile Device Management (MDM) software. This MDM ensures that the workstations has correctly configured password managers, automatic updates, antivirus software, full disk encryption, and screensaver lock. These settings are checked for every single employee’s workstation every day.

#### Contingency planning

Felt runs regular business continuity and disaster recovery tabletop scenarios to plan for unforeseen events. These events include but are not limited to loss of key personnel, degradation of key infrastructure, and operational force majeur events. The remediations for these possible events are discussed annually.

#### Policies

Felt maintains a wide array of policies regarding security. These policies are reviewed and updated annually where necessary.

* Acceptable Use Policy
* Asset Management Policy
* Backup Policy
* Business Continuity Plan
* Code of Conduct
* Controls Assessment Program
* Data classification Policy
* Data Classification, Handling, and Retention
* Data Protection Policy
* Disaster Recovery Plan
* Encryption Policy
* Incident Management Policy
* Incident Response Plan
* Information Security Policy
* Password Policy
* Physical Security Policy
* Responsible Disclosure Policy
* Risk Assessment Policy
* Software Development Lifecycle Policy
* System Access Control Policy
* Vendor Management Policy
* Vulnerability Management Policy

#### Background checks

Felt runs a background check for all new hires globally. This check contains information such as:

* Enhanced Identity Verification
* US Criminal Record Check
  * National Sex Offender Registry Scan
  * Security Watchlist Scan
  * Fraud Scan
  * OFAC Global Sanctions Scan
  * Criminal Record Scan
  * Federal Record Scan
  * Single State County Record Scan
  * All State County Record Scan

#### Security training

All Felt employees are required to go through annual security training, as well as be presented with the policies. Acceptance of these policies and completion of security training is monitored automatically before employees can access any internal systems that include customer data.

#### Disclosure policy

Felt aims to notify customers of any data breaches as soon as possible via email and has documented policies. Known incidents are reported on our Twitter feed ([twitter.com/felt](http://twitter.com/felt)) where users can see updates.

## Vulnerability disclosure

Security researchers are encouraged to reach out to Felt’s security team at <security@felt.com> via a working proof of concept. Felt does not have a bounty bug program, and encourage researches to responsibly disclose issues.

## Compliance attestations and certifications

Felt has received the following compliances:

* SOC 2 Type 2

Interested parties can reach out to <support@felt.com> to request a copy of our SOC 2 Type 2 report.

### Data Privacy Addendum

Felt works with many educational institutions with their unique needs such as Family Educational Rights and Privacy Act (FERPA) and Childen’s Online Privacy Protection Rule (COPPA) requirements. Felt maintains a robust Data Protection Addendum (DPA). Interested parties can reach out to <support@felt.com> to request our DPA.

## Contact

For further information, please reach out to <privacy@felt.com>


# Privacy policy

Effective date: 11/01/2021

### **Introduction**

Welcome to **Felt Maps Inc.**

Felt Maps Inc. (“us”, “we”, or “our”) operates <https://felt.com> (hereinafter referred to as “**Service**”).

Our Privacy Policy governs your visit to <https://felt.com>, and explains how we collect, safeguard and disclose information that results from your use of our Service.

We use your data to provide and improve Service. By using Service, you agree to the collection and use of information in accordance with this policy. Unless otherwise defined in this Privacy Policy, the terms used in this Privacy Policy have the same meanings as in our Terms and Conditions.

Our Terms and Conditions (“**Terms**”) govern all use of our Service and together with the Privacy Policy constitutes your agreement with us (“**agreement**”).

### **Definitions**

**SERVICE** means the <https://felt.com> website operated by Felt Maps Inc.

**PERSONAL DATA** means data about a living individual who can be identified from those data (or from those and other information either in our possession or likely to come into our possession).

**USAGE DATA** is data collected automatically either generated by the use of Service or from Service infrastructure itself (for example, the duration of a page visit).

**COOKIES** are small files stored on your device (computer or mobile device).

**DATA CONTROLLER** means a natural or legal person who (either alone or jointly or in common with other persons) determines the purposes for which and the manner in which any personal data are, or are to be, processed. For the purpose of this Privacy Policy, we are a Data Controller of your data.

**DATA PROCESSORS (OR SERVICE PROVIDERS)** means any natural or legal person who processes the data on behalf of the Data Controller. We may use the services of various Service Providers in order to process your data more effectively.

**DATA SUBJECT** is any living individual who is the subject of Personal Data.

**THE USER** is the individual using our Service. The User corresponds to the Data Subject, who is the subject of Personal Data.

### **Your rights**

Felt will not sell or share your Data as such terms are defined in the California Privacy Rights Act (“CPRA”). CPRA creates rights which include:

1. the right to correct inaccurate personal information;
2. the right to limit use and disclosure of sensitive personal information
3. the right to know (request disclosure of) personal information collected, from whom it was collected, why it was collected, and, if sold, to whom;
4. the right to delete personal information collected;
5. the right to opt-out of the sale of personal information (if applicable);
6. the right to opt-in to the sale of personal information;
7. the right to non-discriminatory treatment for exercising any rights; and
8. the right to initiate a private cause of action for data breaches.
9. **Information Collection and Use**

We collect several different types of information for various purposes to provide and improve our Service to you.

### **Types of Data Collected**

#### **Personal Data**

While using our Service, we may ask you to provide us with certain personally identifiable information that can be used to contact or identify you (“**Personal Data**”). Personally identifiable information may include, but is not limited to:

(a) Email address

(b) First name and last name

(c) Address, State, Province, ZIP/Postal code, City

(d) IP Address and Cookies

We may use your Personal Data to contact you with newsletters, marketing or promotional materials and other information that may be of interest to you. You may opt out of receiving any, or all, of these communications from us by emailing to <privacy@felt.com>

**Usage Data**

We may also collect information that your browser sends whenever you visit our Service (“**Usage Data**”).

This Usage Data includes your computer's de-idenitified Internet Protocol address (IP address), browser type, browser version, the pages of our Service that you visit, the time and date of your visit, the time spent on those pages, unique device identifiers and other diagnostic data. Felt owns the intellectual property rights in the Usage Data.

**Tracking Cookies Data**

We use cookies and similar tracking technologies to track the activity on our Service and we hold certain information.

Cookies are files with a small amount of data which may include an anonymous unique identifier. Cookies are sent to your browser from a website and stored on your device. Other tracking technologies are also used such as beacons, tags and scripts to collect and track information and to improve and analyze our Service.

You can instruct your browser to refuse all cookies or to indicate when a cookie is being sent. However, if you do not accept cookies, you may not be able to use some portions of our Service.

Examples of Cookies we use:

* **Session Cookies:** We use Session Cookies to operate our Service.
* **Preference Cookies:** We use Preference Cookies to remember your preferences and various settings.
* **Security Cookies:** We use Security Cookies for security purposes.
* **Advertising Cookies:** Advertising Cookies are used to serve you with advertisements that may be relevant to you and your interests.
* **Use of Data**

Felt Maps Inc. uses the collected data for various purposes:

(a) to provide and maintain our Service;

(b) to notify you about changes to our Service;

(c) to allow you to participate in interactive features of our Service when you choose to do so;

(d) to provide customer support;

(e) to gather analysis or valuable information so that we can improve our Service;

(f) to monitor the usage of our Service;

(g) to detect, prevent and address technical issues;

(h) to fulfill any other purpose for which you provide it;

(i) to carry out our obligations and enforce our rights arising from any contracts entered into between you and us, including for billing and collection;

(j) to provide you with notices about your account and/or subscription, including expiration and renewal notices, email-instructions, etc.;

(k) to provide you with news, special offers and general information about other goods, services and events which we offer that are similar to those that you have already purchased or enquired about unless you have opted not to receive such information;

(l) in any other way we may describe when you provide the information;

(m) for any other purpose with your consent.

**Retention of Data**

We will retain your Personal Data only for as long as is necessary for the purposes set out in the Agreement and this Privacy Policy but no more than twelve months after the termination of your Account. We will retain and use your Personal Data to the extent necessary to comply with our legal obligations (for example, if we are required to retain your data to comply with applicable laws, resolve disputes, and enforce our legal agreements and policies.

**Processing Location**

Your consent to this Privacy Policy followed by your submission of such information represents your agreement to process the data in the United States.

**Disclosure of Data**

We may disclose personal information that we collect, or you provide:

**(a) Disclosure for Law Enforcement.**

Under certain circumstances, we may be required to disclose your Personal Data if required to do so by law or in response to valid requests by public authorities.

**(b) Business Transaction.**

If we or our subsidiaries are involved in a merger, acquisition or asset sale, your Personal Data may be transferred.

**(c) Other cases. We may disclose your information also:**

(i) to our subsidiaries and affiliates;

(ii) to contractors, service providers, and other third parties we use to support our business;

(iii) to fulfill the purpose for which you provide it;

(iv) for any other purpose disclosed by us when you provide the information;

(v) with your consent in any other cases;

(vi) if we believe disclosure is necessary or appropriate to protect the rights, property, or safety of the Company, our customers, or others.

### **Security of Data**

The security of your data is important to us but remember that no method of transmission over the Internet or method of electronic storage is 100% secure. While we strive to use commercially acceptable means to protect your Personal Data, we cannot guarantee its absolute security.

Our Policy on “Do Not Track” Signals:

We do not respond to DNT signals or similar mechanisms transmitted by web browsers.

**Service Providers**

We may employ third party companies and individuals to facilitate our Service (“**Service Providers**”), provide Service on our behalf, perform Service-related services or assist us in analyzing how our Service is used.

These third parties have access to your Personal Data only to perform these tasks on our behalf and are obligated not to disclose or use it for any other purpose. [Customer.io](http://customer.io) is a marketing platform that enables Felt to send emails and text messages. To opt out, email <privacy@felt.com>

### **Analytics**

We may use third-party Service Providers to monitor and analyze the use of our Service. Learn more about which services we use here: <http://felt.com/subprocessors>

### **Behavioral Remarketing**

Felt Maps Inc. uses remarketing services to advertise on third party websites to you after you visited our Service. We and our third-party vendors use cookies to inform, optimize and serve ads based on your past visits to our Service.

**Google Ads (AdWords)**

Google Ads (AdWords) remarketing service is provided by Google Inc.

You can opt-out of Google Analytics for Display Advertising and customize the Google Display Network ads by visiting the Google Ads Settings page: <https://www.google.com/settings/ads>

Google also recommends installing the Google Analytics Opt-out Browser Add-on – <https://tools.google.com/dlpage/gaoptout> – for your web browser. Google Analytics Opt-out Browser Add-on provides visitors with the ability to prevent their data from being collected and used by Google Analytics.

For more information on the privacy practices of Google, please visit the Google Privacy Terms web page: <https://policies.google.com/privacy?hl=en>

### **Links to Other Sites**

Our Service may contain links to other sites that are not operated by us. If you click a third party link, you will be directed to that third party's site. We strongly advise you to review the Privacy Policy of every site you visit.

We have no control over and assume no responsibility for the content, privacy policies or practices of any third party sites or services.

### **Children's Privacy**

Our Services are not intended for use by children age 13 and under for users in the United States, Belgium, Denmark, Portugal, Sweden and the United Kingdom, 14 and under in China, Spain, Bulgaria, Austria, Cyprus, Italy and Lithuania, 15 and under in Slovenia, Check Republic, Greece and France and 18 and under for India, Columbia, Indonesia, Egypt and 16 and under all other countries (“Children”).

We do not knowingly collect personally identifiable information from Children. If you become aware that a Child has provided us with Personal Data, please contact us. If we become aware that we have collected Personal Data from Children without verification of parental consent, we take steps to remove that information from our servers.

### **Educational Policies such as FERPA and DPA**

We work with many schools and school districts FERPA requirements. We also have a robust Data Processing Agreement (DPA) framework in place <http://felt.com/dpa>. Please reach out to our privacy team at <privacy@felt.com> for next steps.

### **Changes to This Privacy Policy**

We may update our Privacy Policy from time to time. We will notify you of any changes by posting the new Privacy Policy on this page.

We will let you know via email and/or a prominent notice on our Service, prior to the change becoming effective and update “effective date” at the top of this Privacy Policy.

You are advised to review this Privacy Policy periodically for any changes. Changes to this Privacy Policy are effective when they are posted on this page.

### **Notice and Claims of Intellectual Property Violations and Copyright Infringement Pursuant to Section 512(c) of Title 17 of the United States Code**

Felt is committed to respecting and protecting the legal rights of copyright owners. As such, Felt adheres to the following notice and take down policy, in full compliance with Section 512(c)(3) of the DMCA (17 U.S.C. § 512 et seq.). If you believe any of the materials infringes upon your intellectual property rights, please submit a notification alleging such infringement (hereafter a “DMCA Takedown Notice”). To be valid, a DMCA Takedown Notice must (i) be provided to Felt’s designated agent, (“Copyright Agent”), as set forth below, and (ii) include the following:

(a) A physical or electronic signature of a person authorized to act on behalf of the owner of an exclusive right that is allegedly infringed;

(b) Identification of the copyrighted work claimed to have been infringed, or, if multiple copyrighted works at a single online site are covered by a single notification, a representative list of such works;

(c) Identification of the material claimed to be infringing or to be the subject of infringing activity and that is to be removed or access disabled and information reasonably sufficient to permit the service provider to locate the material; (d)Information reasonably sufficient to permit the service provider to contact you, such as an address, telephone number, and, if available, an electronic mail;

(e) A statement that you have a good faith belief that use of the material in the manner complained of is not authorized by the copyright owner, its agent, or the law; and

(f) A statement that, under penalty of perjury, the information in the notification is accurate and you are authorized to act on behalf of the owner of the exclusive right that is allegedly infringed.

Felt’s Copyright Agent to receive DMCA Takedown Notices is:

<support@felt.com>

UNDER FEDERAL LAW, IF YOU KNOWINGLY MISREPRESENT THAT ONLINE MATERIAL IS INFRINGING, YOU MAY BE SUBJECT TO CRIMINAL PROSECUTION FOR PERJURY AND CIVIL PENALTIES, INCLUDING MONETARY DAMAGES, COURT COSTS, AND ATTORNEYS’ FEES.

### **Contact Us**

If you have any questions about this Privacy Policy, please contact us at <privacy@felt.com>.


# Terms of service

PLEASE READ THESE TERMS OF SERVICE (“TERMS”) CAREFULLY BEFORE USING THE SERVICES OFFERED BY FELT MAPS, INC. (“FELT”). BY MUTUALLY EXECUTING ONE OR MORE ORDER FORMS WITH FELT WHICH REFERENCE THESE TERMS (EACH, AN “ORDER FORM”), YOU (“CUSTOMER”) AGREE TO BE BOUND BY THESE TERMS (TOGETHER WITH ALL ORDER FORMS, THE “AGREEMENT”) TO THE EXCLUSION OF ALL OTHER TERMS. IN ADDITION, ANY ONLINE FORM WHICH YOU SUBMIT VIA FELT’S STANDARD ONLINE PROCESS AND WHICH IS ACCEPTED BY FELT (AN “ONLINE ORDER FORM”) SHALL BE DEEMED TO BE A MUTUALLY EXECUTED ORDER FORM HEREUNDER. IF YOU ARE ENTERING INTO THIS AGREEMENT ON BEHALF OF AN ENTITY, THEN YOU REPRESENT AND WARRANT THAT YOU ARE AUTHORIZED TO BIND SUCH ENTITY TO THE TERMS OF THIS AGREEMENT. IF THE TERMS OF THIS AGREEMENT ARE CONSIDERED AN OFFER, ACCEPTANCE IS EXPRESSLY LIMITED TO SUCH TERMS.

1. Order Forms; Access to the Service. Upon mutual execution, each Order Form shall be incorporated into and form a part of the Agreement. For each Order Form, subject to Customer’s compliance with the terms and conditions of this Agreement (including any limitations and restrictions set forth on the applicable Order Form) Felt grants Customer a nonexclusive, limited, personal, nonsublicensable, nontransferable right and license to internally access and use the Felt product(s) and/or service(s) specified in such Order Form (collectively, the “Service,” or “Services”) during the applicable Order Form Term (as defined below) for the internal business purposes of Customer, only as provided herein and only in accordance with Felt’s applicable official user documentation for such Service (the “Documentation”).
2. Account Types. Felt allows both individual users (“Individual Customers”) and entities/organizations (“Organization Customers”) to create accounts to access the Services (an “Account”). “Customer” as used herein refers to either Individual Customers or Organization Customers, as applicable. Individual Customers acknowledge and agree that if such Customer signed up for the Services in a manner that indicates that such Individual Customer is associated with a particular entity, organization or employer (e.g., by using an email or other credentials associated with such entity, organization or employer), and if such entity, organization or employer currently has or later enters into an agreement for the Services with Felt (an “Organization Agreement”), then at Felt’s option, such Individual Customer’s Account may be merged with and/or subsumed by such employer’s, organization’s or entity’s Account under the applicable Organization Agreement (an “Organization Account Transfer”), at which point this Agreement will terminate with respect to such Individual Customer and any further use of the Services will be pursuant to the applicable Organization Agreement. For clarity, except as expressly set forth on an Order Form that is not an Online Order Form, if Customer is an Organization Customer, Customer may only subscribe to a single subscription plan for the Services in the aggregate across all of Organization Customer and all affiliates of Organization Customer (and all domains, organizations, and divisions of any of the foregoing). Unless otherwise expressly set forth on an Order Form, (i) subscriptions to the Services are issued on a seat license basis, and each seat license shall be designated for use only by a single, specifically identified natural person employed or otherwise engaged by Customer (each, an “Authorized User”), (ii) seat licenses are personal to the designated Authorized User and may not be shared, transferred, or made available for use by any other individual, whether concurrently or otherwise, (iii) reallocation of a seat license shall be permitted solely upon the cessation of employment or engagement of the designated Authorized User with Customer (at which time Customer may reassign such seat license to a replacement Authorized User), and (iv) any reallocation, transfer, or use of a seat license inconsistent with the foregoing shall constitute a material breach of this Agreement unless expressly authorized in writing by Felt.
3. Implementation. Upon payment of any applicable fees set forth in each Order Form, Felt agrees to use reasonable commercial efforts to provide standard implementation assistance for the Service only if and to the extent such assistance is set forth on such Order Form (“Implementation Assistance”). If Felt provides Implementation Assistance in excess of any agreed-upon hours estimate, or if Felt otherwise provides additional services beyond those agreed in an Order Form, Customer will pay Felt at its then-current hourly rates for consultation.
4. Support; Service Levels. Subject to Customer’s payment of all applicable fees, Felt will provide support, maintenance, and uptime for each Service in accordance with any support and availability terms that may be set forth or referenced on the applicable Order Form (or otherwise, in accordance with Felt’s then-current standard support and availability policies for the Service).
5. Service Updates. From time to time, Felt may provide upgrades, patches, enhancements, or fixes for the Services to its customers generally without additional charge (“Updates”), and such Updates will become part of the Services and subject to this Agreement; provided that Felt shall have no obligation under this Agreement or otherwise to provide any such Updates. Customer understands that Felt may make improvements and modifications to the Services at any time in its sole discretion; provided that Felt shall use commercially reasonable efforts to give Customer reasonable prior notice of any major changes.
6. Modification of Terms. Felt reserves the right to change these Terms at any time, and if Felt does so, Felt will place a notice on its website, send Customer an email, and/or notify Customer by some other reasonable means. Any such changed Terms will apply to Customer upon the commencement of Customer’s next Renewal Term (as defined below). If Customer does not agree with the new Terms, Customer may reject them; but will no longer be able to use the Services. If Customer uses the Services in any way after a change to the Terms is effective, that means Customer agree to all of the changes. Except for changes by Felt as described here, no other amendment or modification of these Terms will be effective unless in writing and signed by both Customer and Felt.
7. Ownership; Feedback. As between the parties, Felt retains all right, title, and interest in and to the Services, and all software, products, works, and other intellectual property and moral rights related thereto or created, used, or provided by Felt for the purposes of this Agreement, including any copies and derivative works of the foregoing. Any software which is distributed or otherwise provided to Customer hereunder (including without limitation any software identified on an Order Form) shall be deemed a part of the “Services” and subject to all of the terms and conditions of this Agreement. No rights or licenses are granted except as expressly and unambiguously set forth in this Agreement. Customer may (but is not obligated to) provide suggestions, comments or other feedback to Felt with respect to the Service (“Feedback”). Felt acknowledges and agrees that all Feedback is provided “AS IS” and without warranty of any kind. Notwithstanding anything else, Customer shall, and hereby does, grant to Felt a nonexclusive, worldwide, perpetual, irrevocable, transferable, sublicensable, royalty-free, fully paid up license to use and exploit the Feedback for any purpose. Nothing in this Agreement will impair Felt’s right to develop, acquire, license, market, promote or distribute products, software or technologies that perform the same or similar functions as, or otherwise compete with any products, software or technologies that Customer may develop, produce, market, or distribute.
8. Fees; Payment. Customer shall pay Felt fees as set forth in each Order Form (“Fees”). Unless otherwise specified herein or in an Order Form, all Fees shall be invoiced annually in advance and all invoices issued under this Agreement are payable in U.S. dollars within thirty (30) days from date of invoice. Past due invoices are subject to interest on any outstanding balance of the lesser of 1.5% per month or the maximum amount permitted by law. Customer shall be responsible for all taxes (excluding taxes based on Felt’s net income), as well as any fees that may be charged by any of Customer’s banks or financial institutions, in each case associated with the Service and/or any payments made by Customer hereunder. Without limiting the foregoing, if withholding or deduction of any such taxes or fees would reduce the amounts payable to Felt hereunder, then the Fees shall automatically be increased such that the amount received by Felt after such withholding or deduction is the full amount Felt would have received if no withholding or deduction had been made. All Fees paid are non-refundable and are not subject to set-off. If Customer exceeds any user or usage limitations set forth on an Order Form, then (i) Felt shall invoice Customer for such additional users or usage at the overage rates set forth on the Order Form (or if no overage rates are set forth on the Order Form, at Felt’s then-current standard overage rates for such usage), in each case on a pro-rata basis from the first date of such excess usage through the end of the Order Form Initial Term or then-current Order Form Renewal Term (as applicable), and (ii) if such Order Form Term renews (in accordance with the section entitled “Term; Termination”, below), such renewal shall include the additional fees for such excess users and usage.
9. Restrictions. Except as expressly set forth in this Agreement, Customer shall not (and shall not permit any third party to), directly or indirectly: (i) reverse engineer, decompile, disassemble, or otherwise attempt to discover the source code, object code, or underlying structure, ideas, or algorithms of the Service (except to the extent applicable laws specifically prohibit such restriction); (ii) modify, translate, or create derivative works based on the Service; (iii) copy, rent, lease, distribute, pledge, assign, or otherwise transfer or encumber rights to the Service; (iv) use the Service for the benefit of a third party; (v) remove or otherwise alter any proprietary notices or labels from the Service or any portion thereof; (vi) use the Service to build an application or product that is competitive with any Felt product or service; (vii) interfere or attempt to interfere with the proper working of the Service or any activities conducted on the Service; or (viii) bypass any measures Felt may use to prevent or restrict access to the Service (or other accounts, computer systems or networks connected to the Service). Customer is responsible for all of Customer’s activity in connection with the Service, including but not limited to uploading Customer Data (as defined below) onto the Service. Customer (a) shall use the Service in compliance with all applicable local, state, national and foreign laws, treaties and regulations in connection with Customer’s use of the Service (including those related to data privacy, international communications, export laws and the transmission of technical or personal data laws), and (b) shall not use the Service in a manner that violates any third party intellectual property, contractual or other proprietary rights.
10. Customer Data. For purposes of this Agreement, “Customer Data” means any data, information or other material provided, uploaded, or submitted by Customer to the Service in the course of using the Service, and “Usage Data” means usage data that is derived from Customer’s use of the Service, including patterns identified through the use of the Service, Customer Data, and data regarding the performance of the Service. For the avoidance of doubt, the actual contents of any map data or GIS data provided by Customer is considered “Customer Data” and not “Usage Data”. Customer shall retain all right, title and interest in and to the Customer Data, including all intellectual property rights therein. Customer, not Felt, shall have sole responsibility for the accuracy, quality, integrity, legality, reliability, appropriateness, and intellectual property ownership or right to use of all Customer Data. Customer represents and warrants that it has all rights necessary to provide the Customer Data to Felt as contemplated hereunder, in each case without any infringement, violation or misappropriation of any third party rights (including, without limitation, intellectual property rights and rights of privacy). Felt shall use commercially reasonable efforts to maintain the security and integrity of the Service and the Customer Data. Felt is not responsible to Customer for unauthorized access to Customer Data or the unauthorized use of the Service unless such access is due to Felt’s gross negligence or willful misconduct. Customer is responsible for the use of the Service by any person to whom Customer has given access to the Service, even if Customer did not authorize such use. By using the Services, Individual Customers acknowledge and agree that such Customers are subject to the provisions in this Agreement as well as those in Felt’s Privacy Policy (located at <https://help.felt.com/terms-and-policy/privacy-policy>). In the event and to the extent that an Enterprise Customer is a controller or processor of Personal Data (as defined in the DPA) that is subject to certain Data Protection Laws (as defined in the DPA), the EU Data Processing Addendum located at \[URL] the “DPA”) is hereby included and incorporated into this Agreement. To the extent that the Customer Data or Usage Data includes any personal information, (i) Felt will process, retain, use, and disclose such personal information only as necessary to provide the Services hereunder and as otherwise permitted under this Agreement, which constitutes a business purpose, (ii) Felt agrees not to sell such personal data, to retain, use, or disclose such personal data for any commercial purpose other than the foregoing purposes, or to retain, use, or disclose such personal data outside of the scope of this Agreement, and (iii) each party will comply with all applicable local, state, national and foreign laws, treaties and regulations in connection with processing personal information (including those related to data privacy, international communications, export laws and the transmission of technical or personal data laws). Felt understands its obligations under applicable data protection laws and will comply with them. Nothing herein shall prevent Felt from transferring an Individual Customer’s Account and sharing an Individual Customer’s Customer Data with an applicable Enterprise Customer in connection with an Entity Account Transfer (which Customer Data may then be used by such Enterprise Customer in accordance with the applicable Entity Agreement). Customer agrees and acknowledges that Customer Data may be irretrievably deleted if Customer’s account is ninety (90) days or more delinquent. Notwithstanding anything to the contrary, Customer acknowledges and agrees that Felt may (i) internally use and modify (but not disclose) Usage Data for the purposes of (A) providing the Service to Customer and (B) generating Aggregated De-Identified Data (as defined below), and (ii) freely use, retain and make available Aggregated De-Identified Data for Felt’s business purposes (including without limitation, for purposes of improving, testing, operating, promoting and marketing Felt’s products and services). “Aggregated De-Identified Data” means Usage Data in aggregate, de-identified form which can in no way be linked specifically to Customer.
11. Vendor Integrations. Customer acknowledges and agrees that (i) the Service may integrate with, connect to, or otherwise use platforms, products or services operated or provided by third parties (e.g., other vendors of Customer) (“Vendor Integrations”), including via use of application programming interfaces (APIs) provided by such Vendor Integrations, (ii) the availability and operation of the Service or certain portions thereof may be dependent on Felt’s ability to access such Vendor Integrations, and (iii) Customer’s failure to provide adequate access or any retraction of permissions relating to such Vendor Integrations may result in a suspension or interruption of the Service. Customer hereby represents and warrants that it has all rights, licenses, permissions and consents necessary to connect, use and access any Vendor Integrations that it integrates with the Service, and Customer shall indemnify, defend and hold harmless the Felt for all claims, damages and liabilities arising out of Customer’s use of any Vendor Integrations in connection with or through the Service. Customer is solely responsible for procuring any and all rights necessary for it to access Vendor Integrations (including any Customer Data or other information relating thereto) and for complying with any applicable terms or conditions thereof. Any exchange of data or other interaction between Customer and a third party provider is solely between Customer and such third party provider and is governed by such third party’s terms and conditions. Felt cannot and does not guarantee that the Service shall incorporate (or continue to incorporate) any particular Third Party Integrations and does not make any representations or warranties with respect to Third Party Integrations.
12. Third Party Terms. Customer acknowledges and agrees that: (i) the Service may incorporate certain technology, information, data, and materials from third party providers (collectively, “Third Party Services”); (ii) without limiting any rights that Customer may have under any separate agreement between Customer and any provider of a Third Party Service, Third Party Services may only be used in conjunction with the Service; and (iii) Customer’s use of the Third Party Services hereunder shall be subject to (and Customer agrees it is bound by) the third party terms and conditions referenced at \[URL] (the “Third Party Terms Site”), as they may be modified from time to time by Felt and/or its third party licensors or suppliers at any time (collectively, the “Third Party Terms”), and which are incorporated into this Agreement by reference. Customer is responsible for checking the Third Party Terms Site for updates. Any use by Customer of the Services following a change to the Third Party Terms shall constitute acceptance of such change. Felt cannot and does not guarantee that the Service shall incorporate (or continue to incorporate) any particular Third Party Services, and does not make any representations or warranties with respect to Third Party Services or any third party providers.
13. Term; Termination. This Agreement shall commence upon the date of the first Order Form, and, unless earlier terminated in accordance herewith, shall last until the expiration of all Order Form Terms. For each Order Form, unless otherwise specified therein, the “Order Form Term” shall begin as of the effective date set forth on such Order Form, and unless earlier terminated as set forth herein, (x) shall continue for the initial term specified on such Order Form (which, if not specified in such Order Form, shall be one (1) month) (the “Order Form Initial Term”), and (y) following the Order Form Initial Term, shall automatically renew for additional successive periods of equal duration to the Order Form Initial Term (each, a “Order Form Renewal Term”) unless either party notifies the other party of such party’s intention not to renew no later than thirty (30) days prior to the expiration of the Order Form Initial Term or then-current Order Form Renewal Term, as applicable. In the event of a material breach of this Agreement by either party, the non-breaching party may terminate this Agreement by providing written notice to the breaching party, provided that the breaching party does not materially cure such breach within thirty (30) days of receipt of such notice. Without limiting the foregoing, Felt may suspend or limit Customer’s access to or use of the Service if (i) Customer’s account is more than sixty (60) days past due, or (ii) Customer’s use of the Service results in (or is reasonably likely to result in) damage to or material degradation of the Service which interferes with Felt’s ability to provide access to the Service to other customers; provided that in the case of subsection (ii): (a) Felt shall use reasonable good faith efforts to work with Customer to resolve or mitigate the damage or degradation in order to resolve the issue without resorting to suspension or limitation; (b) prior to any such suspension or limitation, Felt shall use commercially reasonable efforts to provide notice to Customer describing the nature of the damage or degradation; and (c) Felt shall reinstate Customer’s use of or access to the Service, as applicable, if Customer remediates the issue within thirty (30) days of receipt of such notice. All provisions of this Agreement which by their nature should survive termination shall survive termination, including, without limitation, accrued payment obligations, ownership provisions, warranty disclaimers, indemnity and limitations of liability. For clarity, any services provided by Felt to Customer, including any assistance in exporting the Customer Data, shall be billable at Felt’s standard rates then in effect.
14. Indemnification. Each party (“Indemnitor”) shall defend, indemnify, and hold harmless the other party, its affiliates and each of their respective employees, contractors, directors, suppliers and representatives (collectively, the “Indemnitee”) from all losses, liabilities, and expenses paid or payable to an unaffiliated third party (including reasonable attorneys’ fees) (“Losses”), that arise from or relate to any claim by such third party that (i) the Customer Data or Customer’s use of the Service (in the case of Customer as Indemnitor), or (ii) the Service (in the case of Felt as Indemnitor), infringes, violates, or misappropriates any intellectual property or proprietary right of such third party; provided that the Indemnitee providing the Indemnitor with: (x) prompt written notice of any claim (provided that a failure to provide such notice shall only relieve the Indemnitor of its indemnity obligations if the Indemnitor is materially prejudiced by such failure); (y) the option to assume sole control over the defense and settlement of any claim (provided that the Indemnitee may participate in such defense and settlement at its own expense); and (z) reasonable information and assistance in connection with such defense and settlement (at the Indemnitor’s expense). The foregoing obligations of Felt do not apply (A) with respect to the Service or any information, technology, materials or data (or any portions or components of the foregoing) to the extent (1) not created or provided by Felt (including without limitation any Customer Data), (2) made in whole or in part in accordance to Customer specifications, (3) modified after delivery by Felt, (4) combined with other products, processes or materials not provided by Felt (where the alleged Losses arise from or relate to such combination), (B) where Customer continues allegedly infringing activity after being notified thereof or after being informed of modifications that would have avoided the alleged infringement, or (C) to the extent Losses arise from Customer’s breach of this Agreement.
15. Free/Trial Use. Felt may make the Services or certain editions of the Services (e.g., a free trial, evaluation, “community”, or similar version) available to Customer free of charge (“Free Offerings”). Notwithstanding anything else, (i) if Customer provides any Customer Data in connection with a Free Offering, Felt shall have no obligations with respect to such Customer Data, and Felt expressly disclaims any liability with respect to such Customer Data, (ii) Free Offerings are provided “AS-IS,” without warranty of any kind, (iii) Felt shall not have any obligation to provide any support or availability commitments for Free Offerings, and (iv) Felt shall have no obligations under Section 14 (Indemnification) or liability of any kind with respect to Free Offerings (unless such exclusion of liability is not enforceable under applicable law, in which case Felt’s liability with respect to the Free Offerings shall not exceed $100.00).
16. Disclaimer. EXCEPT AS EXPRESSLY SET FORTH HEREIN, THE SERVICE IS PROVIDED “AS IS” AND “AS AVAILABLE” AND ARE WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, AND ANY WARRANTIES IMPLIED BY ANY COURSE OF PERFORMANCE, USAGE OF TRADE, OR COURSE OF DEALING, ALL OF WHICH ARE EXPRESSLY DISCLAIMED.
17. Limitation of Liability. EXCEPT FOR THE PARTIES’ INDEMNIFICATION OBLIGATIONS AND FOR CUSTOMER’S BREACH OF THE SECTION ENTITLED “RESTRICTIONS”, IN NO EVENT SHALL EITHER PARTY, NOR ITS DIRECTORS, EMPLOYEES, AGENTS, PARTNERS, SUPPLIERS OR CONTENT PROVIDERS, BE LIABLE UNDER CONTRACT, TORT, STRICT LIABILITY, NEGLIGENCE OR ANY OTHER LEGAL OR EQUITABLE THEORY WITH RESPECT TO THE SUBJECT MATTER OF THIS AGREEMENT (I) FOR ANY LOST PROFITS, DATA LOSS, COST OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR SPECIAL, INDIRECT, INCIDENTAL, PUNITIVE, OR CONSEQUENTIAL DAMAGES OF ANY KIND WHATSOEVER, SUBSTITUTE GOODS OR SERVICES (HOWEVER ARISING), (II) FOR ANY BUGS, VIRUSES, TROJAN HORSES, OR THE LIKE (REGARDLESS OF THE SOURCE OF ORIGINATION), OR (III) FOR ANY DIRECT DAMAGES IN EXCESS OF (IN THE AGGREGATE) THE FEES PAID (OR PAYABLE) TO FELT HEREUNDER IN THE TWELVE (12) MONTHS PRIOR TO THE EVENT GIVING RISE TO A CLAIM HEREUNDER.
18. Miscellaneous. This Agreement (including all Order Forms) represents the entire agreement between Customer and Felt with respect to the subject matter hereof, and supersedes all prior or contemporaneous communications and proposals (whether oral, written or electronic) between Customer and Felt with respect thereto. In the event of any conflict between these Terms and an Order Form, the Order Form shall control. The Agreement shall be governed by and construed in accordance with the laws of the State of California, excluding its conflicts of law rules, and the parties consent to exclusive jurisdiction and venue in the state and federal courts located in San Francisco, California. All notices under this Agreement shall be in writing and shall be deemed to have been duly given when received, if personally delivered or sent by certified or registered mail, return receipt requested; when receipt is electronically confirmed, if transmitted by facsimile or e-mail; or the day after it is sent, if sent for next day delivery by recognized overnight delivery service. Notices must be sent to the contacts for each party set forth on the Order Form. Either party may update its address set forth above by giving notice in accordance with this section. Except as otherwise provided herein, any provision of this Agreement may be amended or waived only by a writing executed by both parties. Except for payment obligations, neither party shall be liable for any failure to perform its obligations hereunder where such failure results from any cause beyond such party’s reasonable control, including, without limitation, the elements; fire; flood; severe weather; earthquake; vandalism; accidents; sabotage; power failure; denial of service attacks or similar attacks; Internet failure; acts of God and the public enemy; acts of war; acts of terrorism; riots; civil or public disturbances; strikes lock-outs or labor disruptions; any laws, orders, rules, regulations, acts or restraints of any government or governmental body or authority, civil or military, including the orders and judgments of courts. Neither party may assign any of its rights or obligations hereunder without the other party’s consent; provided that (i) either party may assign all of its rights and obligations hereunder without such consent to a successor-in-interest in connection with a sale of substantially all of such party’s business relating to this Agreement, and (ii) Felt may utilize subcontractors in the performance of its obligations hereunder. Customer agrees that Felt may use Customer’s name and logo to refer to Customer as a customer of Felt on its website and in marketing materials. No agency, partnership, joint venture, or employment relationship is created as a result of this Agreement and neither party has any authority of any kind to bind the other in any respect. In any action or proceeding to enforce rights under this Agreement, the prevailing party shall be entitled to recover costs and attorneys’ fees. If any provision of this Agreement is held to be unenforceable for any reason, such provision shall be reformed only to the extent necessary to make it enforceable. The failure of either party to act with respect to a breach of this Agreement by the other party shall not constitute a waiver and shall not limit such party’s rights with respect to such breach or any subsequent breaches.


# Attribution policy

<details>

<summary>Felt Web Application</summary>

<https://felt.com/js/oss-licenses.json>

</details>

<details>

<summary>Felt color palettes</summary>

| **Palette Description**                      | **Author**                                                                                       | **License**                                           | **License Text**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          | **Source**                                                                               |
| -------------------------------------------- | ------------------------------------------------------------------------------------------------ | ----------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- |
| Wikipedia Elevation Scheme                   | Eric Gaba                                                                                        | Public Domain                                         | <https://creativecommons.org/publicdomain/zero/1.0/deed.en>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               | <https://fr.wikipedia.org/wiki/Aide:Cartographie>                                        |
| Various ColorBrewer Palettes                 | Cynthia Brewer                                                                                   | Apache v2 license                                     | <https://www.apache.org/licenses/LICENSE-2.0>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             | [https://colorbrewer2.org/](https://colorbrewer2.org/#type=sequential\&scheme=BuGn\&n=3) |
| Viridis, Plasma, Magma and Inferno colormaps | <p>Nathaniel J. Smith, Stefan van der Walt,<br>and (in the case of viridis) Eric Firing.<br></p> | CCO with attribution requested                        | <p>The Viridis, Magma, Plasma, and Inferno colormaps are released under the CC0 license / public domain dedication. We would appreciate credit if you use or redistribute these colormaps, but do not impose any legal restrictions. To the extent possible under law, the persons who associated CC0 with mpl-colormaps have waived all copyright and related or neighboring rights<br>to mpl-colormaps.<br></p>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         | <https://bids.github.io/colormap/>                                                       |
| Black Forest Topographic Palette             |                                                                                                  | Creative commons attribution share-alike 3.0 unported | <https://creativecommons.org/licenses/by-sa/3.0/deed.fr>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  | <https://commons.wikimedia.org/wiki/File:Schwarzwald-topographie.png>                    |
| R Terrain Color Palette                      | The R Foundation                                                                                 | N/A                                                   | N/A                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       | <https://www.r-project.org/>                                                             |
| CM Ocean Algae Palette                       | Kristen M. Thyng                                                                                 | The MIT License                                       | <p>Copyright (c) 2016 Kristen Thyng<br><br>Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:<br><br>The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.<br><br>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE<br>AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.<br></p>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          | <http://kristenthyng.com/>                                                               |
| <p>Cividis Palette<br><br></p>               |                                                                                                  | Copyright (c) 2017, Battelle Memorial Institute       | <p>1. Battelle Memorial Institute (hereinafter Battelle) hereby grants<br>permission to any person or entity lawfully obtaining a copy of this software and associated documentation files (hereinafter “the Software”) to redistribute and use the Software in source and binary forms, with or without modification. Such person or entity may use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and may permit others to do so, subject to the following conditions:<br><br>+ Redistributions of source code must retain the above copyright notice, thislist of conditions and the following disclaimers.<br>+ Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.<br>+ Other than as used herein, neither the name Battelle Memorial Institute orBattelle may be used in any form whatsoever without the express written consent of Battelle.<br><br>2. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,<br>THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BATTELLE OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;<br>LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT<br>(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.<br></p> | <https://github.com/pnnl/cmaputil>                                                       |
| Paul Tol Colorblind Friendly Palettes        | Paul Tol                                                                                         | Copyright (c) 2021, Paul Tol. All rights reserved.    | <p>Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:<br>\* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.<br>\* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. \* Neither the name of the copyright holder nor the names of contributors may be used to endorse or promote products derived from this software without specific prior written permission.<br><br>THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.<br></p>                                                                                                                                                                                                                                                                                                                                                        | <https://personal.sron.nl/\\~pault/>                                                     |

</details>


