DATA OPS
Reconcile BigQuery audience row counts against HubSpot after each sync
After a reverse-ETL job pushes a BigQuery audience to HubSpot, this counts source rows versus synced contacts and alerts Slack when the delta exceeds a tolerance.
How it runs
The automated pipeline, trigger to output.
- TriggerReverse-ETL run completes (webhook with run ID + audience)HTTP webhook
- ActionCount source rows in BigQuery audience snapshotBigQuery
- ActionCount HubSpot contacts tagged with sync batch IDHubSpot
- LogicCompute delta and compare to tolerance threshold
- OutputPost confirmation or row-count drift alert to SlackSlack
What it does
Verifies that every row your reverse-ETL pipeline pushed from BigQuery actually landed in HubSpot. It compares the source audience row count to the count of contacts now carrying the sync's batch label, computes the drift, and pings your data team in Slack only when the gap is real.
When to use it
Run it right after a scheduled audience export (marketing segments, churn-risk lists, product-qualified leads). Silent partial syncs are the classic reverse-ETL failure: the job reports success but 4% of contacts hit a HubSpot validation error and vanish. This catches that before campaigns go out against an incomplete list.
How it works
- 1A webhook from your reverse-ETL tool fires when the sync run finishes, carrying the run ID and audience name.
- 2Query BigQuery for the exact row count of the audience snapshot tied to that run.
- 3Query HubSpot for the number of contacts stamped with the matching sync batch property.
- 4A logic step computes the absolute and percentage delta and compares it to a configured tolerance.
- 5If within tolerance, post a quiet confirmation; if not, post a red-flagged Slack alert with both counts, the delta, and the run ID for triage.
Set it up
What you configure once, before turning it on.
- 1Connect BigQueryDatasets, queries, schemas.
- 2Connect HubSpotCRM, deals, marketing, support.
- 3Connect SlackChannels, DMs, threads, mentions.
- 4Connect HTTP webhookTrigger any URL on agent actions.
- 5Set each agent's modelWe leave models unset so you pick the tier — fast + cheap, or top-quality.
- 6Tune it to your dataEdit the prompts, filters, and field mappings so it matches how your team works.
- 7Test, then turn it onRun once against a sample, confirm the output, then enable the trigger.
More Data Ops workflows
Snowflake column type-drift sentinel with Linear fix ticket
Snapshots the data types of every column in your tracked Snowflake schemas on a schedule, diffs against the last snapshot.
Daily BigQuery Scheduled-Query Cost Attribution to Owners
Each morning, totals the prior day's on-demand bytes-billed per scheduled query, maps each query to its owner from a label, and posts a per-owner cost leaderboard to Slack.
BigQuery dropped/renamed column sentinel with PagerDuty incident
Detects when a column is dropped or renamed in your governed BigQuery datasets and, because that breaks downstream queries hard, pages the on-call via PagerDuty and posts…
PR-time Snowflake schema contract check on dbt model changes
When a pull request changes a dbt model, it compares the model's declared output columns against the live Snowflake table it will replace and blocks the merge with a GitHub check…
Agent-triaged warehouse drift with impact analysis and runbook update
On a webhook from your warehouse audit log, an agent investigates the changed column, traces which downstream models and dashboards depend on it.
Cross-warehouse replication schema mismatch reconciler
Compares the column shape of mirrored tables between BigQuery and Snowflake and, when a replicated table has drifted out of sync between the two, opens an Asana task for the data…
Run it inside a business
This workflow drops into a full company template. Import the org, and this is one of the playbooks its agents run.

Run this workflow in your colony.
14-day trial. No DevOps. No Sales call. Provisioned in under a minute.
