TileJSON Tileset Metadata Extractor avatar

TileJSON Tileset Metadata Extractor

Pricing

from $0.35 / 1,000 records

Go to Apify Store
TileJSON Tileset Metadata Extractor

TileJSON Tileset Metadata Extractor

Point at ANY TileJSON 3.0 tileset metadata URL (OpenFreeMap, VersaTiles, MapTiler, Stadia, tileserver-gl, Tippecanoe, PMTiles) and extract structured metadata: one row per vector layer (id, fields, zoom) plus bounds, center, attribution, scheme, tile URLs. Raster tilesets emit a summary row.

Pricing

from $0.35 / 1,000 records

Rating

0.0

(0)

Developer

Datamule

Datamule

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

22 days ago

Last modified

Share

Point at any TileJSON 3.0 tileset metadata URL and get its structure as clean, structured rows — one row per vector layer, or a single tileset summary. Works with every conforming map-tile server: OpenFreeMap, VersaTiles, MapTiler, Stadia Maps, tileserver-gl, Tippecanoe output, PMTiles gateways, planetiler builds, and any custom tiles.json.

No per-host scraper, no map rendering — just the metadata document, parsed and normalized.

What it does

Every map-tile server publishes a TileJSON 3.0 document (a tiles.json / tileset-metadata endpoint) describing its tileset: the tiles[] URL templates, the vector_layers[] and their field schemas, geographic bounds, center, minzoom/maxzoom, attribution, scheme, and more. This Actor fetches that document and flattens it.

Input

FieldRequiredDescription
tilesetUrl✅Any TileJSON 3.0 metadata URL. Redirects are followed; relative tile-URL templates are resolved to absolute.
modelayers (default) — one row per vector layer; summary — one tileset-summary row.
userAgentOptional User-Agent override.
timeoutSecsPer-request timeout (default 60).

Example

{
"tilesetUrl": "https://tiles.openfreemap.org/planet",
"mode": "layers"
}

Modes

  • layers (default) — emits one row per vector_layers[] entry: its layerId, layerFields schema (+ layerFieldNames / layerFieldCount), and per-layer layerMinzoom/layerMaxzoom, with the tileset-level metadata joined onto every row.
  • summary — emits exactly one tileset-summary row (name, spec version, bounds, center, zoom envelope, tile URL template, layer count) with no per-layer fan-out.

Raster tilesets

A raster tileset (imagery, hillshade, a raster OpenMapTiles variant) is a valid TileJSON document that simply has no vector_layers. Running such a URL in layers mode automatically falls back to a single tileset summary row (recorded in the row's _note) rather than returning zero rows — so a raster tileset is a real, honest result, never a failure or an empty.

Output

One record per vector layer (or one summary row). Key fields:

  • Tileset: name, description, version, tilejsonVersion, attribution, scheme, format, minzoom, maxzoom, isVector, tilesetLayerCount
  • Extent: bounds (+ boundsWest/South/East/North), center (+ centerLon/Lat/Zoom)
  • Tiles: tileUrlTemplate (first template, resolved absolute), tileUrls
  • Layer (in layers mode): layerId, layerDescription, layerMinzoom, layerMaxzoom, layerFields, layerFieldNames, layerFieldCount
  • Provenance: _tilesetUrl, _mode, _rowIndex, _note, and the lossless _raw original document

A URL that cannot be fetched, is not JSON, or is not a TileJSON document fails loudly — this Actor never fabricates rows.

Pricing

Pay-per-event: $0.0005 per record (one vector layer or one tileset summary).

Maximum charge per run

Each record is billed in the same step that writes it, so the dataset and the charge always match. If your run's maximum total charge can't cover even one record, the Actor makes no request to the tile server and ends with 0 records. Otherwise it stops cleanly at the last affordable record. A restarted run resumes without writing or billing any record twice.