Skip to main content

Comparison

Zapier / MakeTerse
Where logic livesVisual stepsTypeScript in your repo
Workspace contextIDs and step wiringGenerated typed helpers
BranchingVisual pathsNormal code
Reviews and versioningLimitedGit
AI + deterministic toolsAdd-onNative pattern

Example: enrichment workflow

A multi-step Zapier flow becomes a single TypeScript file:
import { AttioRecordCreatedTrigger, createJob, generateText } from "terse-sdk"

import { AttioObject, Skills, Triggers, toolbox } from "./terse.generated"

createJob({
    name: "new-deal-enrichment",
    triggers: [Triggers.attio.onRecordCreated({ object: AttioObject.Companies })],
    onTrigger: async (event: AttioRecordCreatedTrigger) => {
        // Agentic: research and recommend a next step
        const summary = await generateText({
            prompt: `Research ${event.record.values.name} and recommend a next step.`,
            skills: [Skills.attio({ object: AttioObject.Companies }), Skills.web()]
        })

        // Deterministic: write the result back
        await toolbox.attio.upsertRecord({
            object: AttioObject.Companies,
            recordId: event.record.id,
            fields: { research_summary: summary }
        })
    }
})

Choose Zapier when

  • the workflow is linear with no branching
  • the team prefers a visual builder over code
  • versioning and code review are not required

Choose Terse when

  • the workflow needs branching, scoring, or typed context
  • you want source control and code review
  • you need deterministic writes around model judgment