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.
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
Row staged
A new row in Orders staging starts the run with its values.
- 2
Normalise
The currency code is upper-cased, the email lower-cased, the name trimmed and the order date formatted as ISO.
- 3
Convert
The Currency rates row for the currency gives the rate; the amount is converted into the base currency.
- 4
Load
The warehouse record is built and posted to the ingest API.
- 5
Write back
The staging row is marked loaded with the warehouse id, or failed with the reason.
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
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
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 … --waitWhat's included
5 assets, ready to adapt
| Type | Name | Details |
|---|---|---|
| Data table | Currency rates | Exchange rates into the base currency used by the warehouse. Update them from your treasury source (or a scheduled workflow). |
| Data table | Orders staging | Raw orders land here (from an import, a form or another workflow). Each new row is loaded into the warehouse and its load status updated. |
| Integration | Data warehouse | |
| API reference | Ingest order | POST /ingest/orders — Load one normalised order record into the warehouse ingest endpoint. |
| Workflow | Load staged order | 21 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
- Data warehouse integration: set the base URL and API token. Ingest order posts the JSON record to /ingest/orders.
- Update the Currency rates rows (or keep them current with another workflow); the base currency is NZD in the samples.
- Adjust the Warehouse record step to your warehouse column names.
- 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
- Download event-driven-etl-1.0.0.utpkg.
- 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.
- Pick the file. The wizard verifies the checksum, every file hash and the signature, and shows the readme.
- Review the changes (what is created) and the data rows.
- Fill in the requirements, or tick Keep incomplete and finish later with Complete setup.
- Done: the workflow is published and active once setup is complete.
With the CLI
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.yamlVerify 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
- 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
- Headless / API
Headless & Integration
AI ticket triage with human review
An AI agent classifies each helpdesk ticket and drafts a reply; confident, low-risk answers go out automatically and the rest wait for a person.
Needs:AI modelREST APIAssigneesInbound webhook
~20 min setup · IntermediateDetails - Headless / API
Headless & Integration
Document generation pipeline
Turn contract data from any app into a filled Word contract and Excel fee schedule, file both in your DMS and send the contract for e-signature.
Needs:REST APIDocument templatesInbound webhook
~20 min setup · IntermediateDetails - Headless / API
Headless & Integration
Order orchestration API
A synchronous order endpoint for your storefront: validate, price, fraud-screen, reserve stock, authorise payment and create the shipment in one call.
Needs:REST APIInbound webhookAssignees
~25 min setup · AdvancedDetails