Workflows: triggers, steps and what's new

Every way to start a workflow (records, schedules, logins, webhooks, incoming email, buttons, the API), every step you can add, and how to test, watch and fix runs.

  • 9 min read
  • Updated Oct 13, 2026
On this page
  1. Where to find it
  2. Triggers: what starts a workflow
  3. Start a workflow from a page or form
  4. Schedules
  5. Incoming webhooks
  6. Email Catcher
  7. Steps: what a workflow can do
  8. Conditions, branches and loops
  9. Custom code
  10. Integrations
  11. Test, watch and fix runs
  12. Run a workflow from the API
  13. Plans

A workflow is a set of steps that runs on its own when something happens: a record is created, a schedule comes round, a user logs in, a webhook or an email arrives, or someone presses a button. Steps can update records, send emails, call 50+ other tools, create PDFs, ask AI, or run your own code. This page covers everything the workflow builder can do today, including the newest triggers and steps.

Where to find it #

  • Workflows in the left menu lists every workflow in the app. Use folders and tags to keep them organised, and duplicate a workflow to start from a copy.
  • Each table also has a Workflows tab (in the Data Builder) showing the workflows that run on it.

Every workflow starts with a trigger. Press Add First Step on the canvas to add steps under it, and use the Active / Inactive switch to turn it on. Each save can be kept as a version under Workflow Versions, which you can restore later.

Triggers: what starts a workflow #

TriggerRuns whenGood for
Record CreatedA record is added to the table.Welcome emails, setting up related records, notifying a team.
Record UpdateA record in the table is edited.Status changes, approvals, keeping other records in step.
Record Created or EditedEither of the above.Anything that must stay correct whenever a record changes.
ScheduleA time you choose: daily, weekly, monthly, quarterly, and on some plans hourly or every minute.Reminders, overdue checks, nightly clean-up, monthly invoices.
ManualSomeone starts it: the Run button, an action link or form on a page, or the API.Buttons like "Send quote" or "Approve", and runs from your own code.
User EventA user logs in, logs out, changes their password, or registers.Onboarding, login tracking, security alerts.
Incoming WebhookAnother system sends data to the workflow's own URL.Receiving payments, form tools, or any app that can send a webhook.
Email CatcherAn email arrives at the workflow's own email address.Turning emails into tickets, orders or leads, with attachments saved as files.
External Data SourceA user presses Trigger Workflow on a record shown from another tool, such as Stripe or HubSpot.Acting on data that lives in another tool (see External Sources).

Each trigger is tied to a table. The records it runs on are available to every step.

Start a workflow from a page or form #

  • From a form: open the form component, go to Rules > Workflows, and pick the workflows to run after the form saves. Turn on Run Behind the Scenes so the user doesn't wait.
  • From a button on a record: add an action link set to Trigger Workflow on a table, list or details component. The workflow needs the Manual trigger.
  • On many records at once: users can run a Manual workflow on the records currently loaded, or on every record matching filters, and see how many will be included first.

Schedules #

Choose the Schedule trigger, then under Schedule Settings pick how often it runs, the time (at) and the first date (starting from). Record Selection decides which records each run works on, for example "Tasks where Due Date is before today and Status is not Done".

  • Schedules use your app's time zone, and stay correct when the clocks change.
  • Advanced takes a custom pattern such as "every second Tuesday" or "the last day of the month", and shows the next run dates so you can check it.
  • The workflow list shows each workflow's Next Run At.
  • If a run is still going when the next one is due, the next one is skipped, so runs never pile up on top of each other.

Incoming webhooks #

With the Incoming Webhook trigger, the workflow gets its own Webhook URL. Paste that URL into the other system. It accepts POST requests with up to 25 MB of data. Send a test first by adding ?test=true to the URL; the workflow uses the test data to show you the fields you can map in later steps.

You can also customise the reply the sender gets, including values from the workflow's steps. Received data is kept for 14 days so you can look at it in the run history.

Email Catcher #

With the Email Catcher trigger, you choose an email address for the workflow. Every email sent to it starts a run, and you can map the sender, subject, body and attachments into fields. Attachments are saved as normal files in your app (up to 100 MB each, 35 MB per email). Turn on Only allow senders on the list to ignore email from anyone else.

Incoming Webhook and Email Catcher depend on your plan. If they're locked, the trigger picker shows the plan they start on.

Steps: what a workflow can do #

GroupSteps
DataCreate Record, Update Record, Duplicate Record, Copy Record, Lookup Record, Create Connected Record, Update Connected Records
CommunicationSend Email (using one of your email templates), Trigger Webhook
DocumentsCreate PDF Page, Create PDF Form, Export to CSV, Generate HTML Table (a table of records to drop into an email or a rich text field)
IntegrationsOne step per connected tool (see below), plus Custom API for any other service
AI and codeAI Prompt (run a prompt and use its answer in later steps), Run Custom Code (JavaScript or Python)
For the person using the appShow Message: show a status message while the workflow runs
OtherTrigger Pipe

Any step can use values from the trigger record, from earlier steps (including the reply from a webhook, an integration or an AI prompt), from the logged-in user, or a fixed value. Each step has Stop workflow if this action fails for steps later ones depend on.

Conditions, branches and loops #

  • Add Condition splits the workflow into a Yes and a No path. Match All or Any of your rules, using is, is not, contains, starts with, ends with, is blank, higher than, lower than and more.
  • Add Branches sends each record down the first path whose rules it matches, like a set of if / else-if paths.
  • Loop ("For Each Record") runs the steps inside it once for every matching record (up to 500) or every item in a list from an earlier step (up to 10,000). Choose whether to carry on or stop if one pass fails. Inside the loop you can use the item number and the total.

Custom code #

Run Custom Code lets you write a small piece of JavaScript or Python for anything the other steps can't do, such as a tricky calculation or reshaping data. Return a value and later steps can use it. Your code can read app variables and secrets, the logged-in user and app details. A built-in AI assistant can write the code for you, and Test runs it before you save.

javascript
// Add 14 days to the invoice date and pass it to the next step
const due = new Date(record.invoice_date);
due.setDate(due.getDate() + 14);
returnData({ due_date: due.toISOString().slice(0, 10) });

Integrations #

Integration steps connect to other tools with the account you sign in with. They include Stripe, Shopify, WooCommerce, Braintree, Xero, QuickBooks, FreshBooks, Slack, Twilio, SendGrid, Mailchimp, Klaviyo, Pipedrive, Intercom, Zendesk, Freshdesk, Jotform, Monday.com, ClickUp, Jira, Airtable, Knack, Quickbase, Google Docs, Microsoft OneDrive, Amazon S3, UPS, FedEx, Google Translate and more. Use Custom API for any service not on the list.

To sign in to a service with your own app registration (for example your company's Microsoft or Google account), add it under Settings > OAuth Connections: enter the client ID, secret and scopes, then Save & Test. The connected account can be used in workflows across all your apps.

Test, watch and fix runs #

  • Dry run (from the Run button) walks through the workflow without sending emails, writing records or calling other services, so you can check the path it takes.
  • History lists every run: status, how it started, start and end time, and how many records it processed. Open a run to see a timeline of each step, each record, the data each step used and returned, and which steps were slowest.
  • Running shows workflows running now and waiting to run. You can cancel a run.
  • If a run fails for a temporary reason, it's retried automatically. Runs started by an incoming webhook or email can also be retried by hand.
  • The Workflow Manager page component shows run history and step logs inside your live app, for the people who look after it.

Run a workflow from the API #

Any active workflow with the Manual trigger can be started from your own code or another system. In Settings > API Keys, turn on Allow Workflows for the key. Then:

Shell
# Run on one record (leave off /record/... to run without one)
curl -X POST https://api.tadabase.io/api/v1/workflows/run/WORKFLOW_ID/record/RECORD_ID \
  -H "X-Tadabase-App-Id: YOUR_APP_ID" \
  -H "X-Tadabase-App-Key: YOUR_API_KEY" \
  -H "X-Tadabase-App-Secret: YOUR_API_SECRET" \
  -H "Content-Type: application/json" \
  -d '{}'

The run is queued and you get back a queueId. Check on it with GET /workflows/status/queue/{queueId}, and see past runs with GET /workflows/history. Send {"runMode": "dry"} as the body for a dry run. Keep the key and secret on a server; never put them in a web page.

Plans #

Your plan sets how many workflows and steps you can have, how often schedules can run (hourly and every-minute schedules are on higher plans), whether workflows can be run from the API, how long run history and versions are kept, and whether Incoming Webhook and Email Catcher are included. Locked options show the plan they start on.

Trigger Studio Instant rules that keep connected records in step, inside the save itself.

Skip the docs.Just describe it.

Tadabase AI builds it, hosts it and keeps it running. Real backend, real domain, real app.

Plain English. It asks follow-up questions like a real developer.

  • Free plan, no card
  • Unlimited app users
  • Live on your own domain