Our Zapier expertise

Keep the work moving between your tools.

A payment arrives. Someone needs to find the right record, apply the business rules, prepare the accounting hand-off and handle exceptions. We build the process around those steps.

This approach draws on Ownward founder Julien Cyr’s four years in an employment and education group. The architectures below explain the method; their client Zaps remain to be documented.

The right balance of no-code and code

Connect. Check. Keep moving. Trigger → Business rules → Useful action

Operations should be able to follow a record and adapt the rules they own. Delicate work — deduplication, calculations, authentication and API contracts — may need a versioned, tested custom service or connector.

We make each step’s responsibility visible: what triggers it, which data is authoritative, when it can retry and who takes over if an exception needs a decision.

Automate the whole process

When connecting two apps is only the beginning.

Payments, shared records and accounting: explore three complex architectures. These design examples illustrate our approach; they are not yet documented as delivered client Zaps.

Complex integration design

Proposed architecture · client workflow to be documented

A received payment needs to reach the right record.

It started with…

The Stripe payment, Airtable record and Sage customer may use different identifiers. Receiving the same event twice must not create two operations.

The proposed workflow

An orchestration that verifies the event, resolves identifiers, checks business rules, calls Sage through an appropriate adapter and tracks the result in Airtable.

Technologies & official documentation

Payment, orchestration and business outcome
  1. Stripe

    Verified event

    Protected receiver and transactional ledger

  2. Zapier

    Coordination

    Airtable for tracking, code for complex rules

  3. Sage

    Action through an adapter

    Result reference or an exception to handle

Design diagram to adapt to the actual Zap and Sage edition.

What we set out to change

Avoid duplicate processing and make each payment traceable to the intended business outcome.

How it is builtData model, code, controls and team ownership

The user journey

  1. 01

    Verify the Stripe event and retain its key.

  2. 02

    Find the record and prepare a validated business request.

  3. 03

    Execute the authorised Sage action, then record its reference or exception.

Data and hand-off structure

Entity / tableKey fieldsRelationships
Event ledgerProvider · event ID · state · payload hashUnique receipt key; not an Airtable find-then-create lock
Business referenceCustomer · order · currency · legal entityMap identifiers between systems
Operation ledgerBusiness key · destination reference · outcomeTrack attempts independently of the incoming event

Technical implementation

  • Verify the signature against the raw body in the webhook receiver.
  • Reserve keys in a transactional store: Airtable find-then-create does not prevent concurrent arrivals.
  • After a Sage timeout, reconcile the destination before retrying. Event deduplication alone does not guarantee one remote write.

Engineering decision

Separate event deduplication from business-operation ownership

Proposed design, not reviewed client code. One database transaction stores the verified event, reserves the business operation and creates an outbox message. UNIQUE constraints handle concurrent deliveries; a conflict must not roll back the other transaction’s work. The ledger/outbox adapters shown as contracts still need implementation. Sage execution and reconciliation are separate workers; schema version is metadata, not a reason to book the same payment again.

TypeScriptpayment-operation-ledger.ts32 lines
type VerifiedPayment = {  accountId: string; live: boolean; eventId: string;  paymentId: string; legalEntityId: string;};type Transaction = {  insertEventIfAbsent(key: string): Promise<boolean>;  reserveOperationIfAbsent(key: string): Promise<boolean>;  enqueueOutbox(message: { key: string; schemaVersion: 1 }): Promise<void>;};type Ledger = {  transaction<T>(fn: (tx: Transaction) => Promise<T>): Promise<T>;};export async function acceptPayment(event: VerifiedPayment, ledger: Ledger) {  // Caller verified the raw Stripe signature and resolved the tenant mapping.  const namespace = [event.accountId, event.live, event.legalEntityId];  const eventKey = JSON.stringify([...namespace, event.eventId]);  const operationKey = JSON.stringify([    ...namespace, event.paymentId, "record-payment",  ]);  return ledger.transaction(async tx => {    if (!await tx.insertEventIfAbsent(eventKey)) return "duplicate-event";    if (!await tx.reserveOperationIfAbsent(operationKey)) {      return "operation-already-reserved";    }    await tx.enqueueOutbox({ key: operationKey, schemaVersion: 1 });    return "queued";  });}// All three adapters share one durable DB transaction + UNIQUE keys.// Acknowledge the webhook only after commit; an outbox worker invokes Zapier.// No Sage write here. Unknown remote outcomes go to reconciliation first.

Adapted implementation excerpt

Separate event deduplication from business-operation ownership

Controls and boundaries

  • Keep card data out of Airtable; retain only required references and business information.
  • Sensitive decisions and writes require explicit permissions and approval rules.
  • The Sage connector and recovery capabilities depend on the chosen edition and plan.

Who can contribute

  • Operations: reference data, approved rules and exception handling.
  • Builders: documented Zapier steps and mappings within their agreed scope.
  • Developers: API contracts, custom connectors, tests and versioning.

What supports this case

Architecture example developed to explain the approach. No client Zap export or run history has yet been reviewed; no production outcome is claimed.

Working with Ownward

Built together. Then yours to grow.

Your team should be able to handle everyday changes. And know who to call when a problem needs deeper technical expertise.

  1. 01

    Start with the work

    We define the need, each tool’s responsibility and a first version that can be verified, then build the workflow with the team.

  2. 02

    Learn on your own tools

    Your team learns on the delivered product: configuration, monitoring, diagnosis and everyday changes, with the documentation and repository at hand.

  3. 03

    Go further, with support

    Citizen developers, developers and colleagues coding with Claude can contribute to the same documented model. We support complex integrations, code reviews and technical escalation as your needs evolve.

The details that make a delivery useful

The tool, and what your team needs to own it.

Our Ownward delivery standard: guidance stays inside the product, knowledge stays with the code, and coding agents have the context to contribute.

  • An onboarding wizard you can always reopen

    A guided path through roles, essential setup and the first useful action. It remains available from Help, including when a new colleague joins.

  • Documentation in the delivery repository

    Getting started, data model, configuration, integrations, tests, release and rollback: the explanations evolve with the product version. Secrets stay outside the repository.

  • Instructions for coding agents

    AGENTS.md and, where useful, CLAUDE.md describe the architecture, conventions, checks and change rules. An agent extends the shared model; the team retains review and release decisions.

See guided onboarding in a real interface
Connectors, webhooks and error handling

We combine existing integrations, webhooks and custom services around the need. Adding a Zapier error handler disables autoreplay for that Zap, so its recovery strategy must be chosen explicitly.

The Sage edition determines the available APIs and operations. The connector, permissions, Zapier plan and accounting rules must be defined for the actual use case.

Which part of your work could be easier?

Bring the process, the friction or the idea. We can start there.

Talk about your project