New to Kestra?
Use blueprints to kickstart your first workflows.
Build a time series pipeline that geocodes a city, pulls hourly weather data, reshapes it with DuckDB, and loads it into InfluxDB with Kestra.
This blueprint builds an end to end time series ingestion pipeline that turns a plain city name into clean, queryable points inside InfluxDB. It solves a common gap in monitoring and IoT analytics stacks: raw API responses arrive as nested JSON that does not map cleanly to a measurement, and getting that data shaped, typed, and loaded into a time series database usually means glue scripts. Here the whole path from geocoding to load runs as one declarative, reproducible flow.
geocoding task (io.kestra.plugin.core.http.Request) calls the Open Meteo geocoding API to resolve the city input into coordinates.geo_output task (io.kestra.plugin.core.output.OutputValues) extracts latitude and longitude from the JSON response, falling back to default values if no match is found.download_weather_data task (io.kestra.plugin.core.http.Download) fetches hourly temperature_2m readings from the Open Meteo archive API for those coordinates.normalize_data task (io.kestra.plugin.jdbc.duckdb.Queries) uses DuckDB to unnest the parallel time and temperature arrays into rows, tag each with the city and coordinates, and write a flat result.csv.csv_to_ion task (io.kestra.plugin.serdes.csv.CsvToIon) converts that CSV into Kestra's internal Ion format.load task (io.kestra.plugin.influxdb.Load) writes the rows into the temperature_2m measurement in InfluxDB, using the configured org and bucket.InfluxDB stores and queries time series, but it does not fetch upstream APIs, reshape nested JSON, or coordinate the steps that produce the data it ingests. Kestra fills that gap. You get event and schedule triggers, automatic retries on transient API or load failures, full execution lineage across every task, and a declarative YAML definition you can version and review. The HTTP, DuckDB, serdes, and InfluxDB steps all live in one auditable flow instead of scattered cron jobs and scripts.
test for both).INFLUXDB_URL: the base URL of your InfluxDB instance.INFLUXDB_TOKEN: an API token with write access to the target bucket.INFLUXDB_URL and INFLUXDB_TOKEN secrets to your Kestra instance.org and bucket on the load task match your InfluxDB setup.city input.temperature_2m measurement in InfluxDB to verify the loaded points.Schedule trigger to ingest fresh data on a recurring cadence.hourly fields to capture richer metrics.io.kestra.plugin.influxdb query tasks to validate or aggregate after load.