tap into the value of data

transform, join and serve data with flexible and powerful SQL queries and documented, secured APIs

Try tap
tap flow diagram

Any dataset

Upload CSV, JSONL, Parquet and other files or folders of any size

Powerful transformations

Analyse, transform, join and enrich your datasets with SQL

Managed APIs

Create documented, secured and performant APIs with customisable filters

Bring a dataset such as...

#
PostcodeUtf8
AddressLine1Utf8
AddressLine2Utf8
1"KA278LF""Lamlash ""Isle of Arran"
2"KA128SS"" Kilwinning Road"" Irvine"
3"KA280HF""College St ""Millport"
4"KA2 0BE"" Kilmarnock Road""Kilmarnock"
5"KA120DP"" Warrix Avenue""Irvine"
6"KA6 6AB""Dalmellington Road ""Ayr"
7"KA9 2HQ""Biggart Road ""Prestwick"
8"KA6 6DX"" Dalmellington Road""Ayr"
9"KA7 4DW""10 Doonfoot Road ""Ayr"
10"KA215RF""Nelson Road ""Saltcoats"
Arrow down

...clean it up...

SELECT
regexp_replace("Postcode", '\s*(.3$)', ' \1', 'g') AS "Postcode",
trim("AddressLine1") AS "AddressLine1",
trim("AddressLine2") AS "AddressLine2"
FROM data.example
#
PostcodeUtf8
AddressLine1Utf8
AddressLine2Utf8
1"KA27 8LF""Lamlash""Isle of Arran"
2"KA12 8SS""Kilwinning Road""Irvine"
3"KA28 0HF""College St""Millport"
4"KA2 0BE""Kilmarnock Road""Kilmarnock"
5"KA12 0DP""Warrix Avenue""Irvine"
6"KA6 6AB""Dalmellington Road""Ayr"
7"KA9 2HQ""Biggart Road""Prestwick"
8"KA6 6DX""Dalmellington Road""Ayr"
9"KA7 4DW""10 Doonfoot Road""Ayr"
10"KA21 5RF""Nelson Road""Saltcoats"
Arrow down

...join it with another dataset...

SELECT model.example_cleaned.*,
data.uk_postcode_lookup.latitude AS "Latitude",
data.uk_postcode_lookup.longitude AS "Longitude"
FROM model.example_cleaned
JOIN data.uk_postcode_lookup ON "Postcode" = postcode
#
PostcodeUtf8
LatitudeFloat64
LongitudeFloat64
AddressLine1Utf8
AddressLine2Utf8
1"KA27 8LF"55.54312-5.115521"Lamlash""Isle of Arran"
2"KA12 8SS"55.635056-4.676106"Kilwinning Road""Irvine"
3"KA28 0HF"55.761296-4.922755"College St""Millport"
4"KA2 0BE"55.61394-4.539409"Kilmarnock Road""Kilmarnock"
5"KA12 0DP"55.611863-4.660189"Warrix Avenue""Irvine"
6"KA6 6AB"55.434174-4.593108"Dalmellington Road""Ayr"
7"KA9 2HQ"55.492576-4.604862"Biggart Road""Prestwick"
8"KA6 6DX"55.430332-4.595538"Dalmellington Road""Ayr"
9"KA7 4DW"55.449149-4.639765"10 Doonfoot Road""Ayr"
10"KA21 5RF"55.63957-4.772409"Nelson Road""Saltcoats"
Arrow down

...enrich with H3 indexing...

SELECT
model.example_joined.*,
h3_latlng_to_cell("Latitude", "Longitude", 15::INT) AS "H3Res15"
FROM model.example_joined

#
PostcodeUtf8
H3Res15Utf8
LatitudeFloat64
LongitudeFloat64
AddressLine1Utf8
AddressLine2Utf8
1"KA27 8LF""8f19569a8c5c648"55.54312-5.115521"Lamlash""Isle of Arran"
2"KA12 8SS""8f19092e6775410"55.635056-4.676106"Kilwinning Road""Irvine"
3"KA28 0HF""8f19092b0d119ad"55.761296-4.922755"College St""Millport"
4"KA2 0BE""8f190925084439b"55.61394-4.539409"Kilmarnock Road""Kilmarnock"
5"KA12 0DP""8f19092e3d467a6"55.611863-4.660189"Warrix Avenue""Irvine"
6"KA6 6AB""8f1954598d46a49"55.434174-4.593108"Dalmellington Road""Ayr"
7"KA9 2HQ""8f1954598c58ac3"55.492576-4.604862"Biggart Road""Prestwick"
8"KA6 6DX""8f1954598c58ac3"55.430332-4.595538"Dalmellington Road""Ayr"
9"KA7 4DW""8f19545932d3a66"55.449149-4.639765"10 Doonfoot Road""Ayr"
10"KA21 5RF""8f19092f28342c1"55.63957-4.772409"Nelson Road""Saltcoats"
Arrow down

...and tap into this data from your applications:

https://example.com/test?Within=[-5.205964198095899,55.50214416203221,-5.079052659295115,55.57395814779818]
{
  "data": [
    {
      "Postcode": "KA27 8LF",
      "H3Res15": "8f19569a8c5c648",
      "Latitude": 55.54312,
      "Longitude": -5.115521,
      "AddressLine1": "Lamlash",
      "AddressLine2": "Isle of Arran"
    }
  ],
  "_meta": {
    "cursor": null,
    "elapsed": 35
  }
}
  • Upload CSV, JSONL, Parquet and other files of any size
  • Use SQL to select, join, transform and enrich data
  • Create REST APIs on a unique domain
  • Customise API filters, including geospatial
  • Monitor endpoint usage
  • Share generated OpenAPI documentation
  • Secure endpoints via API keys