Sync icon
TeamsIncomingWebhook icon
Pause icon
SlackIncomingWebhook icon

Hightouch Staging-to-Production Promotion with Approval Gate

Run a staging Hightouch sync, notify Microsoft Teams, pause for human approval, then fire the production sync with a full reviewer audit trail in Kestra.

Categories
Data

Promote a Hightouch reverse-ETL sync from staging to production behind a human approval gate, so no customer data lands in production tools until a reviewer signs off. This blueprint runs the staging sync, pages the data team in Microsoft Teams with the staging run details, pauses for review, and only then activates the production sync. It closes the gap between "the sync technically ran" and "someone confirmed the row counts are correct" before live audiences, CRMs, or ad platforms are touched.

How it works

  1. run_staging (io.kestra.plugin.hightouch.Sync) runs the staging Hightouch sync identified by staging_sync_id and waits for completion, exposing the run ID and metrics.
  2. notify_approval (io.kestra.plugin.microsoft365.teams.TeamsIncomingWebhook) posts an Adaptive Card to Teams announcing that a production sync is awaiting approval, referencing the staging runId and the execution.id.
  3. approve_production (io.kestra.plugin.core.flow.Pause) halts the flow for up to approval_timeout (default PT4H) while a reviewer inspects the staging row counts.
  4. run_production (io.kestra.plugin.hightouch.Sync) fires the production sync identified by production_sync_id once the reviewer resumes the execution.
  5. notify_complete (io.kestra.plugin.slack.notifications.SlackIncomingWebhook) confirms in Slack that the approved production sync finished.

What you get

  • A staging-then-production promotion path that never auto-ships to production.
  • Teams notification fired the moment staging finishes, so reviewers are paged immediately.
  • A blocking Pause step that records the reviewer's identity and approval timestamp in execution history automatically.
  • A Slack confirmation closing the loop after the production sync completes.

Who it's for

  • Data engineers operating Hightouch reverse-ETL pipelines.
  • Analytics engineers who need a sign-off before syncing to CRMs or ad platforms.
  • Data platform teams that require an audit trail for production data activation.

Why orchestrate this with Kestra

Hightouch's own scheduler can run a sync on a cron, but it cannot stop mid-pipeline, wait for a named human to approve, and then conditionally trigger a second sync. Kestra adds a real Pause approval gate, declarative YAML you can version control, automatic capture of reviewer identity and timestamp for lineage and audit, retries on transient API failures, and cross-tool coordination across Hightouch, Teams, and Slack in one execution.

Prerequisites

Secrets

  • HIGHTOUCH_API_TOKEN: API bearer token for Hightouch.
  • TEAMS_WEBHOOK_URL: Microsoft Teams incoming webhook URL for the approval notification.
  • SLACK_WEBHOOK_URL: Slack incoming webhook URL for the completion notification.

You also need two Hightouch sync IDs: one pointing at a staging destination and one at the production destination.

Quick start

  1. Set the three secrets above in your Kestra namespace.
  2. Configure two Hightouch syncs, one to a staging destination and one to production.
  3. Run the flow with both sync IDs, then approve the Pause in the Kestra UI to fire the production sync.

How to extend

  • Add an io.kestra.plugin.core.flow.If branch to auto-reject when staging row counts fall outside expected bounds.
  • Replace the Teams card with an email or PagerDuty alert, or add both.
  • Attach a schedule trigger to promote on a fixed cadence, or an SLA assertion to alert when approvals stall.
  • Increase approval_timeout beyond four hours if your review process runs longer.

Links

See How

New to Kestra?

Use blueprints to kickstart your first workflows.