Headless & Integration package

Event-driven ETL

Each new row in an Orders staging table is normalised, converted to the base currency, loaded into the warehouse and marked loaded or failed.

Event-drivenIntermediate~10 min setupv1.0.0

About this package

What it does

Event-driven ETL loads orders into your data warehouse the moment they are staged. Anything that writes a row into the Orders staging table (a CSV import, a form, another workflow or the API) starts a run for that row.

The workflow normalises the row: an upper-case currency code, a lower-case email, a trimmed customer name and an ISO order date. It looks up the exchange rate in the Currency rates table, converts the amount into the base currency, builds the warehouse record and posts it to the warehouse ingest API.

The staging row is then updated with load_status loaded (and the warehouse id) or failed (with the reason: no rate, or the HTTP status). The trigger listens to created events only, so these updates do not start new runs. Adapt the record fields to your warehouse schema and keep the rates current.

Event-driven

Starts when a row is created in a data table (see What's included).

Starts when something changes: a data-table row is created or updated, or a task changes state.

The flow

Step by step

  1. 1

    Row staged

    A new row in Orders staging starts the run with its values.

  2. 2

    Normalise

    The currency code is upper-cased, the email lower-cased, the name trimmed and the order date formatted as ISO.

  3. 3

    Convert

    The Currency rates row for the currency gives the rate; the amount is converted into the base currency.

  4. 4

    Load

    The warehouse record is built and posted to the ingest API.

  5. 5

    Write back

    The staging row is marked loaded with the warehouse id, or failed with the reason.

Load staged order — When a row is created in Orders staging, normalise it, convert the amount to the base currency, load it into the warehouse and write the load status back to the row. The same canvas you get in the designer after installing.

From your code

Start a run over the API

Every workflow can be started over REST, MCP or the CLI, whatever its trigger, with the sample input below. Runs start straight away on the published version; replace <workflow id> with the id the install created.

REST

shell
curl -X POST "$USERTASKS_URL/api/v1/workflows/start" \
  -H "Authorization: Bearer $USERTASKS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"workflow_id":"<workflow id>","variables":{"data_event":"created","data_event_type":"created","row":{"order_ref":"WEB-30417","customer_name":"  Ana Silva ","customer_email":"Ana.Silva@Example.net","order_date":"2026-10-25T21:14:00Z","currency":"usd","amount":249.9,"channel":"web","load_status":"pending","warehouse_id":"","load_message":""},"row_id":"aa555563-7577-479d-bd90-5fbc9ec12121","table_row_id":"aa555563-7577-479d-bd90-5fbc9ec12121","order_ref":"WEB-30417","customer_name":"  Ana Silva ","customer_email":"Ana.Silva@Example.net","order_date":"2026-10-25T21:14:00Z","currency":"usd","amount":249.9,"channel":"web","load_status":"pending","warehouse_id":"","load_message":""}}'

CLI

shell
usertasks workflows inputs <workflow id>          # the start form: keys, types, required
usertasks workflows run <workflow id> --input data_event=created --input data_event_type=created --input row='{"order_ref":"WEB-30417","customer_name":"  Ana Silva ","customer_email":"Ana.Silva@Example.net","order_date":"2026-10-25T21:14:00Z","currency":"usd","amount":249.9,"channel":"web","load_status":"pending","warehouse_id":"","load_message":""}' --input row_id=aa555563-7577-479d-bd90-5fbc9ec12121 … --wait

What's included

5 assets, ready to adapt

TypeNameDetails
Data tableCurrency ratesExchange rates into the base currency used by the warehouse. Update them from your treasury source (or a scheduled workflow).
Data tableOrders stagingRaw orders land here (from an import, a form or another workflow). Each new row is loaded into the warehouse and its load status updated.
IntegrationData warehouse
API referenceIngest orderPOST /ingest/orders — Load one normalised order record into the warehouse ingest endpoint.
WorkflowLoad staged order21 steps — When a row is created in Orders staging, normalise it, convert the amount to the base currency, load it into the warehouse and write the load status back to the row.

Currency rates · 6 sample rows

CurrencyRate to baseBase currencyEffective date

Orders staging · schema only

Order refCustomer nameCustomer emailOrder dateCurrencyAmountChannelLoad statusWarehouse idLoad message

Requirements

What you connect it to

Credentials never travel in a package. The install wizard asks for what your environment must provide, or installs it incomplete until you finish setup.

Needs

  • REST API — A REST API integration: set its base URL and credentials on install.

After installing

  1. Data warehouse integration: set the base URL and API token. Ingest order posts the JSON record to /ingest/orders.
  2. Update the Currency rates rows (or keep them current with another workflow); the base currency is NZD in the samples.
  3. Adjust the Warehouse record step to your warehouse column names.
  4. Load data by inserting rows into Orders staging with load_status pending.

Asked for on install

  • Integration “Data warehouse”Required

    • Tokenconfig.auth_config.token
    • Base urlconfig.base_urldefault https://warehouse.example.com/api· optional

Install

Install it in your workspace

Works on UserTasks cloud and on any self-hosted instance. Installing creates the assets above; nothing runs until you complete setup and start it.

In the app

  1. Download event-driven-etl-1.0.0.utpkg.
  2. Open Automations → Packages and drag the file onto the page (or choose Import package). Browse gallery there lists every gallery package without downloading by hand.
  3. Pick the file. The wizard verifies the checksum, every file hash and the signature, and shows the readme.
  4. Review the changes (what is created) and the data rows.
  5. Fill in the requirements, or tick Keep incomplete and finish later with Complete setup.
  6. Done: the workflow is published and active once setup is complete.

With the CLI

shell
curl -fLO https://usertasks.com/gallery/event-driven-etl-1.0.0.utpkg
usertasks packages inspect event-driven-etl-1.0.0.utpkg       # offline: checksum, hashes, signature
usertasks packages install event-driven-etl-1.0.0.utpkg --dry-run
usertasks packages install event-driven-etl-1.0.0.utpkg       # prompts for each requirement
usertasks packages install event-driven-etl-1.0.0.utpkg --keep-incomplete --yes   # in CI; finish with:
usertasks packages complete event-driven-etl -f values.yaml

Verify the download

File SHA-256
9f8952cb64416c151c3320638dc9b7982e959e0d793d19b7bb40d199de580d2a
Package checksum (what is signed)
sha256:f5fa34865e0767271bade4896a326358710112ca898cb99c5ec929241e640e1d
Signer
Unsigned preview build — compare the SHA-256 above

shasum -a 256 event-driven-etl-1.0.0.utpkg should print the file SHA-256. How gallery packages are signed.

Versions

Version 1.0.0

  1. v1.0.02026-10-26First release.

Installing a newer version upgrades in place: local credentials and requirement values are kept, and changes you made are flagged first. How packages work

More packages

Related

Browse the whole gallery