tap into the value of data
transform, join and serve data with flexible and powerful SQL queries and documented, secured APIs
Try tapAny 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 |
---|---|---|
"KA278LF" | "Lamlash " | "Isle of Arran" |
"KA128SS" | " Kilwinning Road" | " Irvine" |
"KA280HF" | "College St " | "Millport" |
"KA2 0BE" | " Kilmarnock Road" | "Kilmarnock" |
"KA120DP" | " Warrix Avenue" | "Irvine" |
"KA6 6AB" | "Dalmellington Road " | "Ayr" |
"KA9 2HQ" | "Biggart Road " | "Prestwick" |
"KA6 6DX" | " Dalmellington Road" | "Ayr" |
"KA7 4DW" | "10 Doonfoot Road " | "Ayr" |
"KA215RF" | "Nelson Road" | "Saltcoats" |
...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 |
---|---|---|
"KA27 8LF" | "Lamlash" | "Isle of Arran" |
"KA12 8SS" | "Kilwinning Road" | "Irvine" |
"KA28 0HF" | "College St" | "Millport" |
"KA2 0BE" | "Kilmarnock Road" | "Kilmarnock" |
"KA12 0DP" | "Warrix Avenue" | "Irvine" |
"KA6 6AB" | "Dalmellington Road" | "Ayr" |
"KA9 2HQ" | "Biggart Road" | "Prestwick" |
"KA6 6DX" | "Dalmellington Road" | "Ayr" |
"KA7 4DW" | "10 Doonfoot Road" | "Ayr" |
"KA21 5RF" | "Nelson Road" | "Saltcoats" |
...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 |
---|---|---|---|---|
"KA27 8LF" | 55.54312 | -5.115521 | "Lamlash" | "Isle of Arran" |
"KA12 8SS" | 55.635056 | -4.676106 | "Kilwinning Road" | "Irvine" |
"KA28 0HF" | 55.761296 | -4.922755 | "College St" | "Millport" |
"KA2 0BE" | 55.61394 | -4.539409 | "Kilmarnock Road" | "Kilmarnock" |
"KA12 0DP" | 55.611863 | -4.660189 | "Warrix Avenue" | "Irvine" |
"KA6 6AB" | 55.434174 | -4.593108 | "Dalmellington Road" | "Ayr" |
"KA9 2HQ" | 55.492576 | -4.604862 | "Biggart Road" | "Prestwick" |
"KA6 6DX" | 55.430332 | -4.595538 | "Dalmellington Road" | "Ayr" |
"KA7 4DW" | 55.449149 | -4.639765 | "10 Doonfoot Road" | "Ayr" |
"KA21 5RF" | 55.63957 | -4.772409 | "Nelson Road" | "Saltcoats" |
...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 |
---|---|---|---|---|---|
"KA27 8LF" | "8f19569a8c5c648" | 55.54312 | -5.115521 | "Lamlash" | "Isle of Arran" |
"KA12 8SS" | "8f19092e6775410" | 55.635056 | -4.676106 | "Kilwinning Road" | "Irvine" |
"KA28 0HF" | "8f19092b0d119ad" | 55.761296 | -4.922755 | "College St" | "Millport" |
"KA2 0BE" | "8f190925084439b" | 55.61394 | -4.539409 | "Kilmarnock Road" | "Kilmarnock" |
"KA12 0DP" | "8f19092e3d467a6" | 55.611863 | -4.660189 | "Warrix Avenue" | "Irvine" |
"KA6 6AB" | "8f1954598d46a49" | 55.434174 | -4.593108 | "Dalmellington Road" | "Ayr" |
"KA9 2HQ" | "8f1954598c58ac3" | 55.492576 | -4.604862 | "Biggart Road" | "Prestwick" |
"KA6 6DX" | "8f1954598c58ac3" | 55.430332 | -4.595538 | "Dalmellington Road" | "Ayr" |
"KA7 4DW" | "8f19545932d3a66" | 55.449149 | -4.639765 | "10 Doonfoot Road" | "Ayr" |
"KA21 5RF" | "8f19092f28342c1" | 55.63957 | -4.772409 | "Nelson Road" | "Saltcoats" |
...and download or serve this data via an API:
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
- Download the transformed 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