Skip to content
Connector Documentation

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 Referer on 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 .prj must 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 Viewer and BigQuery Job User roles
  • Set the dataset location only if it is outside the US or EU multi-region (for example europe-west1)
  • Use ST_ASGEOJSON(geom) AS geometry to export the geometry column as GeoJSON - BigQuery’s GEOGRAPHY type is always WGS84
  • An optional search query supports ? placeholders for parameters passed via the query HTTP 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 public schema via Project Settings → Data API
  • Use the anon key for data subject to Row Level Security, or service_role to bypass it - treat service_role like 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 geometry column is exposed as GeoJSON, expose a view with ST_AsGeoJSON(geom) AS geometry
  • Paginates through all rows in batches of 1,000 using limit/offset when 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"
}