Connector Documentation
A data source defines where a Connector reads its data from. You configure it by choosing a backend and setting the matching options. This page describes each available backend and how to configure it. Headings match the names shown in the Connector creation wizard.
Airtable
Reads records from a table in an Airtable base using a Personal Access Token.
- Supports reading from a specific view instead of the default view
- Forwards additional query parameters, such as
filterByFormula, to Airtable - Paginates through all records in batches of 100 when enabled
Configuration:
{
"backend": "airtable",
"data_endpoint": {
"baseId": "appXXXXXXXXXXXXXX",
"table": "Table Name",
"apiKey": "patXXXXXXXXXXXXXX",
"view": "Grid view",
"query": "filterByFormula=...",
"paged": true
}
}Apache Solr
Connects to an Apache Solr search index and fetches all matching documents.
- Automatically paginates through large result sets
- Supports multi-value fields and query parameter forwarding
Configuration:
{
"backend": "solr",
"data_endpoint": {
"url": "http://solr:8983/solr/mycore/select",
"query": "q=*:*&wt=json",
"paged": true
}
}Custom JavaScript
Runs custom JavaScript code to fetch and transform data before it enters the processing pipeline. Use this when no built-in backend fits your data source.
- Full control over fetch logic and data shape
- Output must be a stream of NDJSON (Newline Delimited JSON) features
Configuration:
{
"backend": "custom",
"data_endpoint": {
"code": "// Custom JavaScript code to fetch and transform data"
}
}Elasticsearch
Connects to an Elasticsearch search index and fetches all matching documents.
- Same URL is used both for the periodic full fetch and for on-demand search queries
- Supports custom HTTP headers, for example to set
Refereron clusters that check it - Paginates using
from/size, added automatically to the query body when enabled
Configuration:
{
"backend": "elastic",
"data_endpoint": {
"url": "https://search.example.com/index/_search",
"query": "{\"query\": {\"match_all\": {}}}",
"headers": { "Referer": "https://example.com" },
"paged": true
}
}File Upload
Reads data from a file you upload directly in the Connector creation wizard - no external server involved.
- Accepts GeoJSON, GeoPackage, GPX, KML/KMZ, CSV, Excel, or a zipped Shapefile (
.shp,.shx,.dbf, and.prjmust be included) - Converts the uploaded file to GeoJSON on upload and streams it to handle large files without loading everything into memory
- You can store multiple files, but only one is active as the data source at a time
Configuration:
{
"backend": "file",
"data_endpoint": {
"file": "mydata"
}
}GeoJSON over HTTP
Fetches GeoJSON data from an HTTP endpoint.
- Supports paginated APIs
- Flattens nested feature properties automatically
Configuration:
{
"backend": "geojson",
"data_endpoint": {
"url": "https://api.example.com/data.geojson",
"paged": false
}
}Google BigQuery
Runs a SQL query against a Google BigQuery table and uses the result as the data source.
- Requires a service account key with the
BigQuery Data ViewerandBigQuery Job Userroles - Set the dataset location only if it is outside the
USorEUmulti-region (for exampleeurope-west1) - Use
ST_ASGEOJSON(geom) AS geometryto export the geometry column as GeoJSON - BigQuery’sGEOGRAPHYtype is always WGS84 - An optional search query supports
?placeholders for parameters passed via thequeryHTTP parameter
Configuration:
{
"backend": "bigquery",
"data_endpoint": {
"projectId": "my-gcp-project",
"location": "EU",
"credentials": "{\"type\": \"service_account\", ...}",
"query": "SELECT id, name, ST_ASGEOJSON(geom) AS geometry FROM mydataset.mytable"
}
}imx.Platform GraphQL
Connects to imx.Platform’s GraphQL Content Delivery API with automatic pagination. Supports TourSearch, EventSearch, and POI search operations, and extracts geometry from the nested GraphQL response structure.
- Bearer token authentication
- Paginates automatically at 1000 items per page
- Extracts geometry for tours (LineString), events (Point), and POIs
- Flattens nested address and location fields
Configuration:
{
"backend": "infomaxgraphql",
"data_endpoint": {
"url": "https://api.infomax.example.com/graphql",
"token": "your-bearer-token",
"operationName": "TourSearch",
"query": "query TourSearch($pagination: PaginationInput) { ... }",
"variables": "{}"
}
}PMTiles over HTTP
Serves vector tiles directly from a PMTiles archive - a single-file tile format served over HTTP. Unlike other backends, this does not fetch or process data; it reads tiles on demand from the archive using HTTP range requests.
Configuration:
{
"backend": "pmtiles",
"data_endpoint": {
"url": "https://example.com/tiles.pmtiles"
}
}PostgreSQL
Connects to a PostgreSQL database and uses the result of a SQL query as the data source.
- Supports any SQL query, including joins and expressions
- Streams results to handle large datasets without loading everything into memory
Configuration:
{
"backend": "postgres",
"data_endpoint": {
"host": "localhost",
"port": 5432,
"database": "mydb",
"user": "username",
"password": "password",
"query": "SELECT id, name, ST_AsGeoJSON(geom) as geometry FROM my_table"
}
}Supabase
Reads rows from a Supabase table or view through its auto-generated REST API (PostgREST).
- The table or view must be exposed in the
publicschema via Project Settings → Data API - Use the
anonkey for data subject to Row Level Security, orservice_roleto bypass it - treatservice_rolelike a database password - Forwards a raw PostgREST query string to filter or select columns, for example
select=id,name,geometry&status=eq.active - If no
geometrycolumn is exposed as GeoJSON, expose a view withST_AsGeoJSON(geom) AS geometry - Paginates through all rows in batches of 1,000 using
limit/offsetwhen enabled
Configuration:
{
"backend": "supabase",
"data_endpoint": {
"url": "https://xxxxxxxxxxxx.supabase.co",
"table": "mytable",
"apiKey": "your-anon-or-service-role-key",
"query": "select=id,name,geometry&status=eq.active",
"paged": true
}
}Vector Tile Server
Proxies and caches an existing vector tile service. Use this when you already have a tile server and want to cache its output.
- Supports standard
{z}/{x}/{y}tile URL templates - Can pre-seed tiles for a specific bounding box and zoom range
Configuration:
{
"backend": "tileproxy",
"data_endpoint": {
"url": "https://tiles.example.com/{z}/{x}/{y}.pbf",
"seed_bbox": "16.0,48.0,17.0,49.0",
"seed_minzoom": 0,
"seed_maxzoom": 14
}
}Grouped Data Source (Tags)
Combines data from multiple Connectors that share the same tag into a single unified Connector. This is not a backend you pick from the Backend selection in step 1 - it is created automatically when a Connector uses the optional Tags field during creation, and a matching Tag backend does not already exist for that tag.
- Merges field definitions (
data_fields,vectortile_fields,trie_fields) from all tagged sources - Prefixes item IDs with the source Connector name to avoid collisions (e.g.,
pois_123) - Rebuilds automatically when any tagged Connector is updated
Configuration:
{
"backend": "tag",
"name": "mytag"
}