Skip to main content

Workflow Automation

Workflow Automation in AnyDB enables teams to design and run custom business workflows that automatically execute tasks based on changes in structured data.

Instead of relying on manual follow-ups, email reminders, or status tracking, you can configure event-driven workflows that keep your operations moving in real time.

By combining triggers (when something happens) with actions (what should happen next), AnyDB becomes not just a data storage platform, but an operational engine for your business processes. Automations also maintain authorization and run in the context of the Automation Workflow owner so there is no risk of data leak or authorization bypass.

Workflow Automation helps you:

  • Eliminate repetitive manual work
  • Enforce business rules automatically
  • Keep teams aligned with real-time notifications
  • Maintain consistent data states across records
  • Reduce errors caused by missed updates
  • Scale processes without increasing operational overhead

Just like any automation platform, AnyDB Workflows allows you to build logic directly on top of your structured data — but with native awareness of your records, templates, fields.

Typical business use cases include:

  • Automatically assigning tasks when a new issue is created
  • Sending notifications when a status changes
  • Creating follow-up records for sales or support workflows
  • Escalating high-priority records
  • Updating related records to maintain consistency
  • Triggering downstream business processes

Because automation runs directly inside AnyDB, it operates securely within your workspace and respects your data structure, permissions, and record hierarchy.

With Workflow Automation, AnyDB evolves from a system of record into a system of action — enabling your data to actively drive business outcomes.

Overview

Workflow automations consist of two main components:

Triggers: Events that initiate the workflow

TriggerDescription
ManualFires when a user manually runs a workflow
When a Record is CreatedFires when a new record is created in your workspace
When a Record is UpdatedFires when an existing record is modified
Timer (Schedule)Fires on a configured schedule/interval

Actions: Tasks that are executed when the trigger conditions are met

ActionDescription
Create RecordCreates a new record in the selected folder using the provided data
Update RecordUpdates an existing record with the specified field values
Send EmailSends an email to specified recipients with custom subject and body
Copy RecordCopies a record under a target parent record
Move RecordMoves a record under a target parent record
Search RecordsFinds records by template, filter condition, or query string
Generate DocumentExports a record using a formatted export template
Call WebhookCalls a registered webhook with workflow context payload
Script ActionRuns custom JavaScript logic against records and workflow context

Automation Workflow Limits

Automation Workflow limits depend on your AnyDB license plan.

There are two limits:

  • Number of workflows
  • Workflows monthly execution limit

You can find it in your Team Properties dialog

Automation Workflow Limits

For exact values for your workspace, check your billing/subscription details or contact AnyDB support.

Supported Triggers

1. When a Record is Created

This trigger fires when a new record is created in your workspace.

Configuration Options:

Field NameDescriptionExample
Type Name (type)Trigger only if a record created matches a type name"AnyDB Issue"
Parent (parent)Trigger only if a record is created under a specific parent record67a1...
Conditions (filter)Optional condition expression. Supports AND / OR / NOT and comparison operators (==, !=, <, <=, >, >=)Status == "Open" AND Amount > 1000

Notes:

  • filter expressions are validated before execution. Invalid expressions are skipped.
  • String comparisons in filter values are case-insensitive.

Use Cases:

  • Automatically notify team members when new issues are created
  • Create related records in other databases
  • Trigger approval workflows for new submissions

Output Fields:

These fields are available to subsequent action in the workflow:

Field NameTypeDescription
adoidstringThe id of the record
namestringThe name of the created record
urlstringThe URL of the created record

2. When a Record is Updated

This trigger fires when an existing record is modified.

Configuration Options:

Field NameDescriptionExample
Type (typename)Trigger only if the updated record matches a type"AnyDB Issue"
Parent (parent)Trigger only if the updated record is under a specific parent67a1...
Trigger Fields (cellids)Trigger only when any listed fields are changed (comma-separated keys/positions)STATUS,PRIORITY,A3
Conditions (filter)Optional condition expression. Supports AND / OR / NOT and comparison operators (==, !=, <, <=, >, >=)Status == "Closed" OR Amount > 1000

Notes:

  • cellids accepts a comma-separated list of field keys and/or positions.
  • filter expressions are validated before execution.
  • If you want to only trigger when a field is changed to a specfic value, set the condition and trigger field . For example, if you want to trigger only if STATUS field is updated to CLOSED, then set Conditions to "STATUS"=="CLOSED" and Trigger Fields to STATUS

Use Cases:

  • Send notifications when record status changes
  • Update related records automatically
  • Trigger escalation workflows based on field updates

Output Fields:

These fields are available to subsequent action in the workflow:

Field NameTypeDescription
adoidstringThe id of the record
namestringThe name of the record updated
changedCellsIdsstringComma separated list of changed cell ids. If empty then all cells were changed
urlstringThe URL of the updated record

3. Timer (Schedule)

This trigger fires based on a configured schedule or interval.

Configuration Options:

Field NameDescriptionExample
IntervalRun at a recurring interval. Supports ms or duration units ( m, h, d, w, mo)15m, 1d, 1mo, 60000
Start TimeOptional start boundary (HH:mm or absolute date/time)09:00, 2026-03-01T00:00:00Z
End TimeOptional end boundary (HH:mm or absolute date/time)18:00, 2026-12-31
Specific TimeOptional specific daily time to run10:30
Days of WeekOptional weekdays filterMon,Wed,Fri
Days of MonthOptional month-day filter1,15,30

Notes

  • Note that the lowest resolution is greater than 1 minute
  • Start Time and End Time apply to Interval, Days of Week and Days of Month fields.

Use Cases:

  • Daily reminders and follow-up generation
  • Weekly reports and recurring exports
  • Month-end rollups and notifications

Output Fields:

Timer trigger does not emit record-specific output fields. Downstream actions can still use static values and workflow context.

4. Manual

This trigger fires only when a user manually runs the workflow.

Configuration Options:

Manual trigger does not require configuration fields.

Notes:

  • Use this trigger for on-demand workflows that should not run automatically on record events or schedules.
  • It does not emit record-specific output fields by default.

Use Cases:

  • Run one-off remediation or maintenance workflows
  • Execute ad hoc data operations from workflow UI/API
  • Trigger controlled internal workflows during testing or support operations

Output Fields:

Manual trigger does not emit output fields by default.

Supported Actions

1. Create Record

Creates a new record in the selected folder using the provided data.

Data Sources: Every action has access to multiple data.

  1. Trigger Record: This is the record that triggered the workflow. The fields of this record is available to all action
  2. Previous Action: This is the output of the previous action. For example, if previous action creates record, it may supply the newly created record id as output. This fields will be updated as need arises.

Configuration Options:

Parameter NameDescriptionExample
Name*Name of the new record.Follow-up for {{trigger.name}}
ParentParent record to attach the new record to.Some Parent Rec...
TypeType for the new record. IF not provided then it will be typeless (Spread sheet)My New Type
typenameTemplate/type name for the new record. Used to resolve a template id when typeid is not provided.Issue
Set ValuesComma-separated field updates using labels or positions. Examples: Status=Open,Priority=High or A2=300,B4=Closed. Unknown labels are ignored.Sales Stage=Closed Won,Amount=10000
Follow UpFollow-up timestamp. Follow up will generate a notification to the owner of the record (Workflow creator in this case)Jan 1, 2027 10:00:00 PM
AssigneesComma-separated user ids to assign.user1,user2
LockedLock state for the new record. Accepts boolean values.true
Source RecordSource record to copy from. Copies matching cells/children from the source tree into the newly created record tree. This will override the values set in Set Values input fieldMy source rec...
Transform MapOptional type mapping used with copyFrom when child templates differ. Supports map-like values such as OldType=NewType (comma-separated for multiple mappings).Task=Work Item,Subtask=Checklist Item

Notes:

  • name is required.
  • Source Record can be used without Set Values; if both are provided, copy-based values can override overlapping cell_values keys.

Use Cases:

  • Create follow-up tasks automatically
  • Generate related documentation records
  • Create audit trail records

Output Fields:

These fields can be used in subsequent actions:

Field NameTypeDescription
adoidstringThe ID of the created record
namestringThe name of the created record
urlstringThe URL of the created record

2. Update Record

Updates an existing record with the specified field values.

Configuration Options:

Field NameDescriptionExample
Record*Select which record to updateThis can be dynamically picked or static value of record id can be provided
Set Values*A comma-separated list of values to update using labels or positions e.g. 'Sales Stage=Closed,Amount=10000' or 'A9=Closed,B12=10000'C2="CLOSED",A2=1000
Follow UpSet or follow-up date"No Follow Up"
AssigneesModify assigned users"Not Assigned"
LockedChange the lock status"Unlocked"

Use Cases:

  • Auto-close related issues
  • Update status fields across connected records
  • Modify records based on business rules

Output Fields:

These fields can be used in subsequent actions:

Field NameTypeDescription
adoidstringThe ID of the record to update
cell_updatestringComma-separated list of updated fields (pos1=value1,key2=value2)
namestringThe name of the updated record
urlstringThe URL of the updated record

3. Send Email

Sends an email to specified recipients with custom subject and body.

Configuration Options:

Field NameDescriptionExample
To* (to)Recipient email address(es), comma-separated for multiple recipientsops@company.com,owner@company.com
Subject* (subject)Email subject lineRecord {{name}} was updated
Body* (body)Email message bodyStatus changed to Closed
Attachments (attachments)Optional attachments.Previous action output file or Some File Record

Attachment Notes:

  • File-record ADO IDs are resolved automatically.
  • Maximum attachment size is 5 MB per file.

Dynamic Values:

  • Use record fields in subject and body (e.g., "Record Name", "TICKET STATE")
  • Reference trigger record data dynamically

Use Cases:

  • Notify stakeholders of status changes
  • Send alerts when critical issues are created
  • Deliver automated reports or summaries

Output Fields:

These fields can be used in subsequent actions:

Field NameTypeDescription
tostringThe recipient email address
sentAtstring (date-time)The timestamp when the email was sent

4. Copy Record

Copies a source record under a destination parent record.

Configuration Options:

Field NameDescriptionExample
Record*Source record ID to copyadoid from trigger/previous action or Record that triggered the workflow
Destination Record*Destination parent recordFolder/record

Output Fields:

Field NameTypeDescription
new_adoidstringThe ID of the newly copied record
namestringThe name of the copied record
urlstringThe URL of the copied record

5. Move Record

Moves a source record under a destination parent record.

Configuration Options:

Field NameDescriptionExample
Record*Source record ID to moveadoid from trigger/previous action
Destination Record*Destination parent recordFolder/record

Output Fields:

Field NameTypeDescription
adoidstringThe moved record ID
to_adoidstringDestination parent record ID
namestringThe name of the moved record
urlstringThe URL of the moved record

6. Find Records

Finds records using template filter, condition expression, and/or free-text query.

Configuration Options:

Field NameDescriptionExample
Type NameOptional template name filterMy Company Issue
ConditionOptional expression using AND/OR and operators (==, !=, <, <=, >, >=)Status=="Open" AND Amount>1000
Query StringOptional text query against record metadata and fieldscritical payment

At least one of Condition or Query String is required.

Output Fields:

Field NameTypeDescription
refIdsstring[]Matching record IDs
refCountnumberCount of matching records
formattedRefDetailsstringHTML table representation of matches

Notes

  • The formattedRefDetails will be available in action such as sendEmail to send a HTML table of the records. This is a good way to generate filtered record reports such as Sending all overdue invoices for example.
  • Future updates will allove iterating over each of the records using refIds field

7. Generate Document (Formatted Export)

Exports a record using a formatted export template. This requires Document Generation to be setup first. This requires sendEmail action to be used to send the generated document.

Configuration Options:

Field NameDescriptionExample
Formatted Export*Formatted export template record IDThe template file used to export
Record to Export*Record to exportTrigger record

Output Fields:

Field NameTypeDescription
exported_filestringPath/reference to exported file

Notes

  • This can generate a document and with send email action, the generated document can be emailed. There is no other way to get the generated document.

8. Call Webhook

Calls a registered webhook endpoint and sends workflow context payload. This requires registering a webhook in Team Properties first. See Webhooks for setup details.

Important: Call Webhook is available only for teams on Business or Enterprise plans. If your team is on a lower plan, the step will fail with a license requirement message.

Configuration Options:

Field NameDescriptionExample
Webhook*The registered webhookwebhook_abc123
Payload TemplateOptional payload object (supports context variables). If not provided, then a summary of the triggered record will be sent as payload{ "recordId": "{{context:meta.adoid}}" }
HeadersOptional custom HTTP headers{ "x-source": "workflow" }

Output Fields:

Field NameTypeDescription
successbooleanWhether the webhook call succeeded
statusCodenumberHTTP status code from webhook response
responseobjectResponse payload from webhook
calledAtstringTimestamp when webhook was called

Notes

  • If Payload Template is not provided, then a summary of the record with its field values will be sent.

Payload Template Mapping

Payload Template supports nested JSON objects, and string values can include dynamic tokens:

  • {{context:meta.<field>}} for record metadata from trigger context
  • {{context:content.<fieldOrCellPos>}} for record cell values from trigger context

For context:content, you can reference either:

  • A field key (example: {{context:content.Status}})
  • A cell position (example: {{context:content.A1}})

When a mapped value is not found in context, it resolves to an empty string.

Example: Send Record Meta + Cell Fields

{
"record": {
"id": "{{context:meta.adoid}}",
"name": "{{context:meta.name}}",
"teamId": "{{context:meta.teamid}}",
"dbId": "{{context:meta.adbid}}",
"updatedAt": "{{context:meta.updated}}"
},
"cells": {
"status": "{{context:content.Status}}",
"priority": "{{context:content.Priority}}",
"a1": "{{context:content.A1}}"
},
"event": "record_updated"
}

Default Payload Behavior (when Payload Template is empty or omitted)

If you do not set Payload Template, the action sends a default data object derived from the trigger record context, including:

  • teamid, adbid, adoid
  • meta (name, createdbyObject, updatedbyObject)
  • cells (all composed cell key/value pairs)

9. Script Action

Runs custom JavaScript in a workflow runtime with built-in record helpers.

Important: Script Action is available only for teams on Business or Enterprise plans. If your team is on a lower plan, the Script Action step will fail with a license requirement message.

Configuration Options:

Field NameDescriptionExample
Script* (script)JavaScript code to execute (supports async/await)const recs = await base.findRecords("overdue");
Ref IDs (refIds)Optional array of record IDs passed into script input context["67f1...", "67f2..."]
Timeout (timeoutMs)Optional max execution time in milliseconds (default: 300000 = 5 minutes)300000

Supported Script Keywords (Globals):

KeywordTypeDescription
baseobjectData API for finding, creating, and updating records
inputobjectAction input payload (script, refIds, timeoutMs)
outputobjectReport/output helper (markdown, text, json, table, csv)
yieldNowfunctionCooperative yield helper for long loops (await yieldNow())
fetchfunctionHTTP client for external API calls
consoleobjectLogging object (console.log(...))
logfunctionShortcut for console.log(...)

Available Script APIs:

  • base.getRecordById(adoid)
  • base.getRecordsByType(typeName)
  • base.findRecords(queryOrParams) where queryOrParams can be text or { type, condition, querystring }
  • base.createRecord({ name, parentid?, typeid?, typename?, cellValues? })
  • base.updateRecord({ adoid, cellValues? })
  • base.yield() (cooperative event-loop yield for long-running loops)
  • output.markdown(text)
  • output.text(text)
  • output.json(value)
  • output.table(data)
  • output.csv(data)
  • output.set(key, value) (custom outputs for downstream actions)
  • fetch(url, options)
  • yieldNow()
  • console.log(...) and log(...)

Record Data Access Model (Restricted):

Scripts do not get raw ADO objects. Each record returned by base.* APIs exposes only:

  • record.id
  • record.name
  • record.url
  • record.cellValues (field key/position values)
  • record.meta with only these fields:
    • parent
    • assignees
    • name
    • created
    • createdby
    • updated
    • updatedby

No other metadata fields are exposed to script runtime.

How to Access Record Details:

const recs = await base.findRecords({
type: "AnyDB Issue",
});

for (const record of recs) {
await base.yield();

// Basic record fields
const recordId = record.id;
const recordName = record.name;
const recordUrl = record.url;

// Cell values (by key or position)
const title = record.cellValues["TITLE"];
const ticketState = record.cellValues["TICKET STATE"];
const posA1Value = record.cellValues["A1"];

// Allowed meta fields
const parents = record.meta.parent; // array of parent IDs
const assignees = record.meta.assignees; // { users: [...], groups: [...] }
const createdAt = record.meta.created;
const createdBy = record.meta.createdby;
const updatedAt = record.meta.updated;
const updatedBy = record.meta.updatedby;

log(
`Record ${recordId} | name=${recordName} | state=${ticketState} | parentCount=${parents.length}`,
);
}

Create + Update Example:

const invoice = await base.createRecord({
name: "Invoice Follow-up",
typename: "Invoice",
cellValues: {
Status: "Draft",
Currency: "USD",
},
});

await base.updateRecord({
adoid: invoice.id,
cellValues: {
Status: "Ready",
},
});

log(`Created and updated record: ${invoice.id}`);

Find + Update Loop Example:

const invoices = await base.findRecords({
type: "Invoice",
condition: 'Status=="Open"',
});

let updated = 0;
for (const invoice of invoices) {
await base.yield();

const amount = Number(invoice.cellValues["Amount"] || 0);
const taxRate = Number(invoice.cellValues["Tax Rate"] || 0);
const total = amount + amount * taxRate;

await base.updateRecord({
adoid: invoice.id,
cellValues: {
Total: total,
Status: "Recalculated",
},
});

updated += 1;
}

log(`Updated ${updated} invoices`);

API Fetch + Update Example:

const apiResponse = await fetch("https://currency.rate.com?base=USD");
if (!apiResponse.ok) {
throw new Error(`Exchange API failed: ${apiResponse.status}`);
}

const data = await apiResponse.json();
const conversionRate = Number(data?.rates?.EUR || 0);
if (!conversionRate) {
throw new Error("EUR conversion rate is missing from API response");
}

const invoices = await base.findRecords({
type: "Invoice",
condition: 'Currency=="USD" AND Status=="Open"',
});

for (const invoice of invoices) {
await base.yield();

const amountUSD = Number(invoice.cellValues["Amount"] || 0);
const amountEUR = Number((amountUSD * conversionRate).toFixed(2));

await base.updateRecord({
adoid: invoice.id,
cellValues: {
"Amount EUR": amountEUR,
"FX Rate EUR": conversionRate,
},
});
}

log(`Updated ${invoices.length} invoices with EUR conversion`);

CSV Example:

const recs = await base.findRecords({
type: "Invoice",
condition: 'Status=="Overdue"',
});

const rows = recs.map((record) => ({
id: record.id,
name: record.name,
amount: record.cellValues["Amount"],
dueDate: record.cellValues["Due Date"],
}));

output.csv(rows);
log(`Generated CSV rows: ${rows.length}`);

Custom Outputs + Downstream Mapping Example:

const overdue = await base.findRecords({
type: "Invoice",
condition: 'Status=="Overdue"',
});

output.set("overdueCount", overdue.length);
output.set(
"overdueHtml",
`<p>Overdue invoices: <strong>${overdue.length}</strong></p>`,
);

In downstream actions, reference custom outputs by key:

  • {{action_script-<artifactId>.overdueCount}}
  • {{action_script-<artifactId>.overdueHtml}}

You can also access the grouped object:

  • {{action_script-<artifactId>.customOutputs}}

Notes:

  • output.set(key, value) keys must start with a letter/underscore and contain only letters, numbers, and underscores.
  • Avoid reserved keys: scriptSummary, processedRefIds, updatedRefIds, logLines, exported_file, customOutputs.

Output Fields:

Field NameTypeDescription
scriptSummarystringScript execution summary (useful in Send Email or webhook payloads)
exported_filestringGenerated report path (.csv when output.csv(...) is used, otherwise .md)
processedRefIdsstring[]Record IDs processed during script execution
updatedRefIdsstring[]Record IDs updated by the script
logLinesstring[]Console log lines emitted by the script
customOutputsobjectObject containing values set via output.set(key, value)

Notes

  • scriptSummary is intended for downstream actions that need human-readable run output.
  • In simulation mode, create/update operations are not persisted.

Runtime Safety & Abuse Prevention

  • Script execution runs with timeout protection. If script execution exceeds timeoutMs, it is terminated.
  • Obvious tight infinite loops are blocked before execution (for example while(true), while(1), and for(;;)).
  • Loop statements (for, while, do...while, for...of, for...in) must include at least one await in the loop body.
  • For long-running loops, explicitly yield using await base.yield() (or await yieldNow()) to prevent event-loop starvation.
  • Security validation blocks restricted patterns such as import, export, require(...), process, global/module internals, dynamic code execution (eval, Function), and constructor-escape patterns.
  • Only the supported runtime surface is available to scripts (base, input, output, yieldNow, fetch, console, log). Filesystem and Node system-module access are not allowed.

Building a Workflow

  1. Navigate to Automation: Access the Automation section in your workspace
  2. Create New Automation: Click to create a new workflow
  3. Configure Trigger: Select and configure your trigger event
  4. Add Actions: Add one or more actions to execute
  5. Configure Actions: Set up each action with the required parameters
  6. Test: Test your automation to ensure it works as expected
  7. Save and Activate: Save your workflow to activate it

Multiple Actions

You can chain multiple actions together in a single workflow. Actions are executed in sequence:

  1. First action completes
  2. Second action completes
  3. And so on...

This allows you to create complex automation workflows such as:

  • Create a record → Send an email notification
  • Update a record → Create a follow-up task → Send email to assignee

Triggering a Workflow Manually (Run Now / Simulate)

In the Automation details properties tab, you can trigger a workflow manually using Run Now or Simulate even when the workflow trigger is different from Manual.

Run Now

  • Executes the workflow immediately.
  • Can run even if the workflow is currently disabled.
  • For triggers that require a record context (such as When a record is created or When a record is updated), you may need to provide/select a record when running.

Simulate

  • Runs a dry run of the workflow to help validate logic and flow during development.
  • Does not persist any record changes.
  • Does not perform side-effect operations such as sending emails or calling webhooks.
  • Useful for checking how trigger data and action sequencing behave before enabling or executing for real.

Viewing Execution History

Each automation maintains a detailed execution history that allows you to monitor performance, debug issues, and verify that workflows are running as expected.

Accessing Execution History

To view the execution history for a workflow:

  1. Navigate to the Automation section in your workspace
  2. Locate the automation you want to review
  3. Click on the automation to view its execution history

Execution History Details

The execution history displays the last 10 executions for the selected automation. For each execution, you can view:

Execution Overview:

  • Status: Whether the execution succeeded or failed (Success/Failed)
  • Started At: The date and time when the automation was triggered
  • Duration: How long the execution took to complete
  • Trigger: Which trigger event fired (e.g., "When a record is created")

Action Details:

For each action in the workflow, the history shows:

  • Status: Whether the action completed successfully (Success/Failed)
  • Record Information: Links to records that were created or updated
  • Cell Values: The specific field values that were set or modified
  • Email Details: For Send Email actions, shows the recipient and email content

Using Execution History

The execution history is useful for:

  • Monitoring: Verify that automations are running at expected frequency
  • Debugging: Identify which action failed and why
  • Auditing: Track what changes were made by automations
  • Optimization: Review execution times and identify bottlenecks
  • Validation: Confirm that the correct records and values were modified

Execution History

Refreshing History

Click the Refresh button to load the most recent execution data and see the latest automation runs.

Execution Retention

AnyDB displays the last 10 executions for each automation. For longer-term history or more detailed logs, contact AnyDB Support.

Coming Soon

AnyDB is continuously expanding workflow automation capabilities. Upcoming features include:

Upcoming Triggers

  • Form Submission Triggers: Trigger workflows when forms are submitted
  • Additional event-based triggers

Upcoming Actions

  • AI Action Enhancements: Advanced AI processing and orchestration capabilities
  • Additional integration actions

Best Practices

  1. Start Simple: Begin with simple workflows and add complexity as needed
  2. Use Conditions: Apply conditions to triggers to ensure workflows run only when appropriate
  3. Test Thoroughly: Test automations with sample data before deploying to production
  4. Document Workflows: Keep track of what each automation does and why it exists
  5. Monitor Performance: Regularly review automation logs to ensure they're working correctly

Requesting New Features

If you need additional triggers, actions, or automation capabilities that are not currently available:

Contact AnyDB Support to discuss your requirements. The AnyDB team can work with you to implement custom automation features tailored to your business needs.

Troubleshooting

Automation Not Triggering

  • Verify that the automation is saved and activated
  • Check that trigger conditions are properly configured
  • Ensure the record type matches the trigger settings

Actions Not Executing

  • Verify that all required fields are configured
  • Check that you have permissions to perform the actions
  • Review action settings for correct field mappings

Email Not Sending

  • Verify recipient email addresses are correct
  • Check that dynamic field references are valid
  • Ensure email content meets formatting requirements

Additional Resources

For more information about workflow automation:

  • Review use case examples in the Use Cases section
  • Check integration guides for connecting with external systems
  • Contact AnyDB Support for personalized assistance