Back to insights

Data Integration|18 August 2026

How to enforce a simple data contract between two systems (no engineers needed)

A hands‑on pattern to define, validate and enforce a 6‑field data contract between two tools using low‑code checks and a one‑page monitor.

1) Agree the 6‑field contract (60–90 minutes)

Run a short workshop with the two teams that touch the handoff (e.g. sales/CRM and finance/accounting). Pick the six fields that must be correct for downstream work — fewer is better. Typical set for CRM→Accounting: contact_email, contact_id, invoice_number, invoice_date, total_amount, currency.

For each field record the owner, format and one clear validation rule. Keep it operational: who fixes it, how to mark it fixed, and the SLA (example: owner responds within 2 business hours). Write one sentence per field, e.g. “contact_email — required, must match basic email regex, owner: Sales Ops.”

Sample validation rules (concrete):

  • required: contact_email, invoice_number
  • allowed values: currency in [GBP, EUR, USD]; status in [Draft, Sent, Paid]
  • date format: YYYY-MM-DD (ISO) and not more than 30 days in the future
  • currency/amount: total_amount positive, two decimal places (or integer pence if you prefer minor units)

2) Add lightweight validation and quarantine (60–180 minutes → up to 1 week)

Implement the checks using Zapier, Make, a webhook-to-middleware, or the native automation in HubSpot/Salesforce/Marketo/Pardot. Pattern: trigger → validate → pass or quarantine. Keep the implementation low‑code: use platform filters, simple regex/formatters, and a Google Sheet or small middleware script to hold rules.

Concrete HubSpot↔Xero example: on HubSpot invoice/property change trigger a Zapier webhook; Zapier runs Filters/Formatters to check: contact_email present and valid, invoice_number present, invoice_date matches YYYY-MM-DD, total_amount > 0 and currency ∈ [GBP,EUR]. If all pass, Zapier calls Xero action; if any rule fails, Zapier appends the full payload and failing-rule text to a "Quarantine" Google Sheet and posts an alert to Slack/email.

Quarantine behaviour: do not write to destination. Record the raw payload, rule failed, timestamp and owner in the sheet. This keeps bad data from reaching the other system while keeping full traces for a fast fix.

3) Operational runbook: alerts, retries and the unblock/rollback playbook

Monitoring sheet: one page (Google Sheet) that shows live counts and the first 10 quarantine rows with columns: record_id, source, failing_rule, first_failed, last_attempt, owner, retry_state, link_to_source. Add a summary row with total quarantined, retries pending, and time since oldest failure. Schedule a daily 10‑minute check for the owner and a weekly review for patterns (same field/rule failing).

Retries and dead‑letter: add simple retry logic in Zapier/Make — 3 attempts with increasing delay (e.g. immediate, 15 minutes, 2 hours). After final fail mark as "dead‑letter" in the sheet and escalate to the owner on Slack/email. Keep a manual retry button: a simple checkbox or timestamp column that your automation listens for to attempt a one‑off reprocess after a fix.

Unblock and rollback playbook (short, testable steps):

  • Inspect the quarantine row and raw payload in the sheet; note the failing rule and the record owner.
  • Decide fix location: fix at source (e.g. HubSpot contact) if the source is wrong, or adjust mapping if the rule was too strict.
  • Apply the fix, add a short note in the sheet (who, what, when). Trigger the manual retry (flip retry checkbox) and watch the next attempt.
  • If a bad write already went to the destination, use the audit snapshot stored in the sheet (capture pre-write state on every successful sync) to reverse the change: either update the destination fields back, create a reversal entry, or mark the destination record as "requires rollback" and run a small corrective update. For two‑way syncs prefer to pause the opposite sync while you roll back.

Ownership and drills: assign field owners, test the full flow with one or two canary records every month, and run a 15‑minute rollback drill quarterly so everyone knows the steps. Keep the contract document, the quarantine sheet and the retry pattern under version control (a single shared folder) and keep the SMS/Slack escalation list current.

If you want a starter template (one‑page monitor, quarantine sheet columns and a simple Zapier retry pattern), Optira can provide a ready example your team can copy and adapt.

Need this turned into action?

Optira helps smaller teams clean up data, connect systems, build lightweight tools and remove the manual work that keeps coming back.