Automations Guide

Learn how to automate your workflows in Fruitask

Contents

What Are Automations?

Automations let you run actions automatically when something happens in your tables. Instead of doing repetitive tasks manually — like sending emails when a row is created, or updating another table when data changes — you set up a rule once and Fruitask handles it for you.

How it works: A Trigger watches for a table event → one or more Actions run in sequence when it fires.

Getting Started

1

Open the Automation Builder

In any workspace, click the Automations button in the toolbar. You'll see a list of existing automations and a button to create a new one.

2

Set a Trigger

Click the Trigger node on the canvas. Choose when the automation should fire and which table to watch.

3

Add Actions

Click the + button on the canvas to add action steps. Each action runs in order after the trigger fires.

4

Enable & Save

Toggle the automation on and click Save. Your automation is now live and will run whenever the trigger condition is met.

Triggers

Every automation starts with a trigger — the event that kicks off your actions. Click the Trigger node on the canvas to configure it.

row_created

Row is Created

Fires whenever a new row is added to the selected table. All column values from the new row are available to your actions.

row_updated

Row is Updated

Fires whenever any cell in an existing row changes. The updated row data (after the change) is passed to your actions.

row_deleted

Row is Deleted

Fires when a row is removed from the table. The deleted row's data (as it was before deletion) is available to actions.

dropdown_selected

Dropdown Item Selected

Fires when a row is created or updated and a specific dropdown (select) column contains a chosen option value. Works with both single-select and multi-select columns.

checkbox_checked

When Checked

Fires when a row is created or updated and a specific checkbox column is checked (true). Select which checkbox column to monitor — the automation triggers each time the checkbox is ticked on.

deadline_near

Deadline is Near

Fires when a row's deadline date (from Timeline view date columns) falls within a configurable window (1–5 days). Each matching row triggers the automation with its full row data available to actions.

scheduled_time

At Scheduled Time

Fires on a recurring schedule (every 5/15/30 minutes, hourly, daily, weekly, or monthly) in the timezone you choose. There is no trigger row, so use Get Record or Get Data to pull the data your actions need.

webhook

When a Webhook is Received

Fires the moment an external system sends an HTTP request to a URL Fruitask generates for you — no schedule or polling involved. Reference incoming JSON with {{webhook.field}}, nested with dots ({{webhook.customer.email}}). Optionally add a signing secret so only correctly-signed deliveries are accepted. There is no trigger row.

Trigger Configuration

  • Table Select which table to watch for the trigger event.
  • The selected table determines which columns are available for use in your actions.

Dropdown Item Selected — Setup Guide

This trigger fires when a row is created or updated and a specific dropdown column matches the option you configure.

  1. Select a Table: Choose the table that contains the dropdown column you want to monitor.
  2. Pick a Dropdown Column: Only columns with the Dropdown (Select) data type are listed. Choose the one to watch.
  3. Choose the Option: Select which specific option value should trigger the automation (e.g. "Approved", "Urgent", "Done").
  4. Add Actions: Configure what happens when the option is selected — send an email, create a record, notify users, etc. Use {{column_name}} to include row data dynamically.

How it works: Whenever a row is created or updated in the table, the automation engine checks if the dropdown column value matches the configured option. For multi-select columns, the trigger fires if the selected option is included among the chosen values. The automation runs once per matching row change.

When Checked — Setup Guide

This trigger fires when a row is created or updated and a specific checkbox column is checked.

  1. Select a Table: Choose the table that contains the checkbox column you want to monitor.
  2. Pick a Checkbox Column: Only columns with the Checkbox data type are listed. Choose the one to watch.
  3. Add Actions: Configure what happens when the checkbox is ticked — send an email, create a record, notify users, etc. Use {{column_name}} to include row data dynamically.

How it works: Whenever a row is created or updated in the table, the automation engine checks if the checkbox column value is checked (true). The automation runs once per matching row change.

Deadline is Near — Setup Guide

This trigger uses your table's Timeline View date column settings to detect upcoming deadlines.

  1. Configure Timeline View: Open your table, switch to Timeline view, and set the Start Date Column and optionally the End Date Column in Timeline View Setup.
  2. Create the Automation: Select the Deadline is Near trigger and choose the table.
  3. Set Days Before: Choose how many days before the deadline to fire (1–5 days). The trigger checks if the End Date (or Start Date if no End Date) falls within today + N days.
  4. Add Actions: Use {{column_name}} to include row data in emails, notifications, Telegram, Viber, WhatsApp, etc.

Dynamic Values {{column_name}}

Most action fields support dynamic column references. Instead of typing fixed text, you can insert the value from any column in the triggering row.

# Examples

Hello {{Name}}, your task "{{Task Title}}" is due on {{Due Date}}.

# Resolves to:

Hello John, your task "Fix login bug" is due on 2026-03-15.

Column References

Use {{ColumnName}} to insert the value from a column in the current row. Column names are case-insensitive.

Action Result References

Reference data from earlier actions using dot notation: {{get.FieldName}} for Get Record results, {{ai.response}} for AI-generated text, or {{http.response.code}} / {{http.response.YOUR_KEY}} for a Custom HTTP Request response.

Copy Column Names Easily

In the config panel, you'll see an "Available columns" helper at the bottom. Click any column tag to copy its reference to your clipboard.

Row Data Schema Examples

When an automation fires, the triggering row's data is available to all actions via {{column_name}} references. Below are example schemas showing what data is available for each trigger type.

Row Created

All column values from the new row are available.

{
  "rowId": "665a1b2c3d4e5f6a7b8c9d0e",
  "Name": "Alice Johnson",
  "Email": "alice@example.com",
  "Status": "New",
  "Priority": "High",
  "Created At": "2026-06-15T09:30:00Z"
}

# Usage in action message:

New row created: {{Name}} ({{Email}}) — Status: {{Status}}, Priority: {{Priority}}

Row Updated

Updated row data (after the change) is passed. All column values from the row are available.

{
  "rowId": "665a1b2c3d4e5f6a7b8c9d0e",
  "Name": "Alice Johnson",
  "Email": "alice@updated.com",
  "Status": "In Progress",
  "Priority": "Medium",
  "Updated At": "2026-06-16T14:20:00Z"
}

# Usage in action message:

Row updated: {{Name}} changed to Status={{Status}}. Row ID: {{rowId}}

Row Deleted

The deleted row's data (snapshot before deletion) is available.

{
  "rowId": "665a1b2c3d4e5f6a7b8c9d0e",
  "Name": "Alice Johnson",
  "Email": "alice@example.com",
  "Status": "Archived",
  "Priority": "Low"
}

# Usage in action message:

Row deleted: {{Name}} (ID: {{rowId}}) was removed from the table.

Note: {{rowId}} is always available and contains the unique row ID. Column names match exactly what you defined in your table — use the "Available columns" helper in the config panel to copy the correct references.

Actions Reference

Actions are the steps your automation performs when the trigger fires. Click the + Add Action button on the canvas to add one. Click an action node to open its configuration panel on the right.

Send Email

Send an email via SMTP

FieldTypeDescription
Email ProviderSelectChoose Fruitask Email (Free), Gmail, Outlook, Yahoo, or a custom SMTP server.
SMTP Host / PortText / NumberOnly for Custom SMTP — enter the server host and port.
SMTP Username / PasswordTextCredentials for third-party SMTP providers.
To (email)TextRecipient email address.supports
SubjectTextEmail subject line.supports
Body (HTML)TextareaEmail body. Supports full HTML and dynamic column values.supports

Tip: Use the Fruitask built-in email for quick setup. For volume sending, configure your own SMTP provider.

Send Notification

Send in-app Fruitask notifications

FieldTypeDescription
Notify UsersCheckboxesSelect one or more workspace collaborators to notify.
TitleTextNotification title shown to the user.supports
MessageTextareaNotification body text.supports

Tip: Great for alerting team members when a task status changes or a new item is added.

Send Telegram

Send a message via Telegram bot

FieldTypeDescription
Bot TokenTextYour Telegram Bot API token (from @BotFather).
Chat IDTextThe Telegram chat, group, or channel ID to send to.
MessageTextareaThe message text to send.supports

Tip: Use @BotFather on Telegram to create a bot and get your token. Use @userinfobot to find your chat ID.

Send Viber

Send a message via Viber bot

FieldTypeDescription
Auth TokenTextYour Viber bot authentication token (from the Viber Admin Panel).
Receiver IDTextThe Viber user ID or subscriber ID to send the message to.
MessageTextareaThe message text to send.supports

Tip: Create a Viber bot at partners.viber.com to get your auth token. Users must subscribe to your bot before you can send them messages. The Receiver ID is provided when a user subscribes to your bot via the webhook callback. Refer to Applying for a Chatbot since old bot model is not supported anymore.

Send WhatsApp

Send a message via WhatsApp Cloud API

FieldTypeDescription
Phone Number IDTextYour Meta WhatsApp Business Phone Number ID (from the Meta Developer dashboard).
Access TokenTextA permanent or temporary access token for the WhatsApp Cloud API.
Recipient PhoneTextThe recipient's phone number in international format (e.g. +639171234567).
MessageTextareaThe message text to send.supports

Tip: Set up a WhatsApp Business account and a Meta App at developers.facebook.com. Go to WhatsApp > API Setup to get your Phone Number ID and generate an access token. Recipients must have opted in or messaged your business number first.

Custom HTTP Request

Send a request to any URL or webhook

FieldTypeDescription
MethodSelectHTTP method: POST, GET, PUT, PATCH, or DELETE.
URLTextThe full endpoint URL to call.supports
HeadersJSONOptional request headers as JSON.supports
BodyJSONRequest body (for POST/PUT/PATCH). Supports dynamic values.supports

Response variables — reference these in any later action

{{http.response.code}}The HTTP status code returned (e.g. 200, 404, 500).
{{http.response.message}}The body's message field if present, otherwise the status text.
{{http.response.statusText}}The HTTP status text (e.g. OK, Not Found).
{{http.response.YOUR_KEY}}Any field from the JSON response body — the key is dynamic. Examples: {{http.response.product}}, {{http.response.id}}. Nested fields use dots: {{http.response.data.items}}.
{{http.response}}The entire response body as a JSON string.

Tip: Integrate with Slack, Discord, Zapier webhooks, or your own APIs. The request no longer hard-fails on a non-2xx status — instead the status code is captured in {{http.response.code}}, so you can add a Condition after it to branch on the result (e.g. only continue when the code equals 200).

Generate with ChatGPT

Generate text via OpenAI using your own API key

FieldTypeDescription
ModelSelectThe OpenAI model to use (e.g. GPT-4o, GPT-4o mini).
API KeyPasswordYour OpenAI API key. Stored with the automation and used server-side only.
System PromptTextOptional instruction that sets the assistant's behavior.supports
PromptTextThe prompt to send. Inject row data with dynamic references.supports

Response variables — reference these in any later action

{{chatgpt.response}}The generated text returned by ChatGPT.

Tip: Chain it — generate a summary with ChatGPT, then reference {{chatgpt.response}} in a follow-up Send Email, Send Notification, or Update Record action.

Generate with Gemini

Generate text via Google Gemini using your own API key

FieldTypeDescription
ModelSelectThe Gemini model to use (e.g. Gemini 2.0 Flash, 1.5 Pro).
API KeyPasswordYour Google AI Studio API key. Used server-side only.
System PromptTextOptional system instruction.supports
PromptTextThe prompt to send. Inject row data with dynamic references.supports

Response variables — reference these in any later action

{{gemini.response}}The generated text returned by Gemini.

Tip: Get an API key from Google AI Studio, then reference {{gemini.response}} in any later action.

Generate with Claude

Generate text via Anthropic Claude using your own API key

FieldTypeDescription
ModelSelectThe Claude model to use (e.g. Claude Opus 4.8, Sonnet 4.6, Haiku 4.5).
API KeyPasswordYour Anthropic API key. Used server-side only.
System PromptTextOptional system prompt.supports
PromptTextThe prompt to send. Inject row data with dynamic references.supports

Response variables — reference these in any later action

{{claude.response}}The generated text returned by Claude.

Tip: Get an API key from the Anthropic Console, then chain {{claude.response}} into any downstream action.

Generate Image

Create an image with OpenAI and host it on your workspace storage

FieldTypeDescription
ModelSelectOpenAI image model (e.g. gpt-image-1).
QualitySelectRender quality: low, medium, high, or auto.
SizeSelectOutput dimensions (square, landscape, portrait, or auto).
API KeyPasswordYour OpenAI API key. Used server-side only.
PromptTextDescribe the image. Inject row data with dynamic references.supports
Reference image URLTextOptional. A base image to edit/mock up — accepts a URL or a {{value}} from an earlier action.supports

Response variables — reference these in any later action

{{genimage.url}}The hosted public URL of the generated image (uploaded to your workspace storage).
{{genimage.attachment}}An attachment payload you can map to an attachment column in a Create/Update Record action.

Tip: Leave the reference image empty to generate from scratch, or pass {{image.url}} from a Search Image step (or any earlier output) to have the AI edit/mock up that image. The result is uploaded to your storage and the URL is returned for downstream use.

Create Blog in WordPress

Publish a post to a WordPress site via the REST API

FieldTypeDescription
Site URLTextYour WordPress site, e.g. https://yourblog.com.
UsernameTextA WordPress user with author/editor rights.
Application PasswordPasswordGenerated under Users → Profile → Application Passwords. Used server-side only.
TitleTextPost title. Supports dynamic values.supports
ContentHTMLPost body (HTML). Inject row data or earlier action outputs.supports
StatusSelectPublish, Draft, Pending review, or Private.
Excerpt / SlugTextOptional summary and URL slug.supports
Featured image URLTextOptional. Uploaded to the WordPress media library and set as the featured image — accepts a URL or {{genimage.url}} from a Generate Image step.supports
Category / Tag IDsTextOptional comma-separated WordPress term IDs.

Response variables — reference these in any later action

{{wordpress.url}}The published post URL.
{{wordpress.id}}The new post ID.
{{wordpress.status}}The resulting post status (e.g. publish, draft).
{{wordpress.image_url}}The uploaded featured image URL (if one was provided).

Tip: Pair it with Generate with ChatGPT/Claude write the post body with AI, then reference {{claude.response}} in the Content field to auto-publish a draft for review.

Post in Facebook Page

Publish a text, link, or photo post to a Facebook Page

FieldTypeDescription
Connect FacebookOAuthRecommended. Click Connect Facebook, authorize, then pick a Page from the dropdown — no IDs or tokens to copy. (Shown when the server has Facebook Login configured.)
Page IDTextManual mode. The numeric ID of your Facebook Page.supports
Page Access TokenPasswordManual mode. A long-lived Page access token with pages_manage_posts. Stored server-side only.
MessageTextareaThe post text. Supports dynamic values.supports
Image URLTextOptional. A public image URL — when set, the post is published as a photo with the message as caption. Accepts {{genimage.url}}.supports
Link URLTextOptional. A link to attach to a text post.supports
Graph API VersionTextOptional. Defaults to v21.0.

Response variables — reference these in any later action

{{facebook.url}}Permalink to the new post.
{{facebook.id}}The post ID ({pageId}_{postId}).
{{facebook.message}}The message that was posted.

Where to get your credentials
Easiest — Connect Facebook (OAuth): click Connect Facebook in the action, approve the permissions, then choose your Page. Fruitask stores the Page token securely on the server and you never paste anything.

Manual token (no app review needed for Pages you own):
1. Go to developers.facebook.com → My Apps → create a Business app.
2. Open Graph API Explorer, select your app, click Generate Access Token and grant pages_show_list, pages_manage_posts, pages_read_engagement.
3. Call GET /me/accounts each Page in the response has its id (your Page ID) and an access_token (your Page Access Token).
4. Recommended: exchange for a long-lived token so it doesn't expire — see the long-lived tokens guide. Verify any token in the Access Token Debugger.

Tip: chain it after Generate Image and post {{genimage.url}}, or save {{facebook.url}} back to your table with an Update Record action.

Create Instagram Post

Publish a photo or video (Reel) to an Instagram Business account

FieldTypeDescription
Connect FacebookOAuthRecommended. Click Connect Facebook, then pick the Page whose linked Instagram account you want to post to. Only Pages with a linked IG Business account are listed.
Instagram Account IDTextManual mode. Your Instagram Business account ID (not the username).supports
Access TokenPasswordManual mode. A Page access token with instagram_content_publish. Stored server-side only.
Image URLTextA public JPEG URL to post. Accepts {{genimage.url}}.supports
Video URLTextOptional. A public MP4/MOV — posted as a Reel.supports
CaptionTextareaThe caption. Supports dynamic values.supports

Response variables — reference these in any later action

{{instagram.url}}Permalink to the published post.
{{instagram.id}}The published media ID.
{{instagram.caption}}The caption that was posted.

Requirements: Instagram publishing works only with an Instagram Business or Creator account that is linked to a Facebook Page you manage. Link it in your Facebook Page settings (Settings → Linked accounts → Instagram), and make the media URLs public.

Where to get your credentials
Easiest — Connect Facebook (OAuth): click Connect Facebook, approve instagram_basic + instagram_content_publish, then pick the linked account. The account ID and token are resolved on the server automatically.

Manual:
1. Get a Page access token (see the Facebook Page action steps above).
2. Find your Instagram account ID: GET /{page-id}?fields=instagram_business_account&access_token={page-token} the returned instagram_business_account.id is your Instagram Account ID.
3. Use that ID + the Page token in the action. See the Instagram content publishing guide.

Note: single image or single video/Reel only (no carousels/stories), and Instagram allows ~50 posts per account per 24h.

Upload Video in YouTube

Upload a video (from a public URL) to a YouTube channel

FieldTypeDescription
Connect YouTubeOAuthRecommended. Click Connect YouTube and authorize — the video uploads to your connected channel. (Shown when Google OAuth is configured on the server.)
Refresh TokenPasswordManual mode. A Google OAuth refresh token with the youtube.upload scope. Stored server-side only.
Client ID / SecretTextManual mode. Optional — defaults to the server's Google credentials if omitted.
Video URLTextA public URL to the video file (e.g. MP4). Fruitask downloads it and uploads it to YouTube. Accepts dynamic values.supports
TitleTextVideo title. Supports dynamic values.supports
DescriptionTextareaVideo description. Supports dynamic values.supports
PrivacySelectPrivate, Unlisted, or Public.
TagsTextOptional comma-separated tags.supports

Response variables — reference these in any later action

{{youtube.url}}The watch URL of the uploaded video (https://youtu.be/…).
{{youtube.id}}The new video ID.
{{youtube.title}}The uploaded video title.

Requirements: a Google account with a YouTube channel. The video must be reachable at a public URL (Fruitask downloads then uploads it). New/unverified API projects upload videos as private until verified by Google.

Where to get your credentials
Easiest — Connect YouTube (OAuth): click Connect YouTube, approve the youtube.upload permission, done. Fruitask stores the refresh token securely on the server.

GCP setup (for the server admin):
1. In Google Cloud Console create/select a project.
2. APIs & Services → Library → enable YouTube Data API v3.
3. OAuth consent screen → configure (External), add the scope .../auth/youtube.upload, and add test users (or publish the app).
4. Credentials → Create credentials → OAuth client ID → Web application. Add the authorized redirect URI {API_URL}/api/integrations/google/callback.
5. Put the client ID/secret in the server env (GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET) — see the setup doc. Then the Connect YouTube button works for everyone.

Manual refresh token (no Connect button): generate one with the OAuth 2.0 Playground using the youtube.upload scope (set your own client in the gear icon), then paste it here.

Tip: chain it after a Generate/Get step that produces a video URL, then save {{youtube.url}} back to your table.

Embed to Knowledge Base

Add row data to the AI Knowledge Base

How it works: When triggered, all column data from the row is automatically embedded into your workspace's AI Knowledge Base. This makes the data searchable by AI assistants.

Requires: The AI Knowledge Base plugin must be installed in your workspace.

Create Record

Create a new row in another table

FieldTypeDescription
Target TableSelectChoose which table to create the new row in.
Column MappingMapMap each target column to a source value. You can use a fixed value or a dynamic column reference.supports

Tip: Use this to sync data between tables. For example, when a lead is marked "Won" in your CRM table, automatically create a record in your Clients table.

Update Record

Update an existing row in another table

FieldTypeDescription
Target TableSelectChoose which table contains the row to update.
Row SelectionSelectBy Lookup match rows where a target column equals a source value. By Row ID update a specific row by its ID.supports
Column MappingMapMap target columns to new values (supports dynamic references).supports

Tip: The Lookup mode is the most flexible — e.g., match by email to update a user's status across tables.

Delete Record

Delete a row from a table

FieldTypeDescription
Target TableSelectChoose which table to delete from.
Row SelectionSelectBy Lookup delete rows matching a column condition. By Row ID delete a specific row.supports

Warning: Deletions are permanent. Always test before enabling in production.

Get Record

Fetch a row to use in later actions

FieldTypeDescription
Target TableSelectChoose which table to fetch from.
Row IDTextThe ID of the row to fetch.supports

Action Chaining: After fetching, later actions can reference the fetched data using {{get.ColumnName}} syntax. This is powerful for cross-table data lookups.

Get Data

Bulk fetch many rows from a table (pick columns and how many rows)

FieldTypeDescription
Source TableSelectChoose which table to pull rows from.
Columns to fetchChipsToggle the columns you want. Leave all unselected to fetch every column.
Rows to fetch — PresetSelectDynamic, based on the table's real total: First 10 / 40 / 100, Half (≈50% of all rows), or All rows.
Rows to fetch — Custom rangeNumber + NumberSet From row and To row (1-based, inclusive) to grab a slice — ideal for batching large tables, e.g. 201–400. Leave “To row” empty to fetch to the end.

Action Chaining: Reference the result in later actions with {{getdata.json}} (rows as JSON), {{getdata.count}} (rows fetched), {{getdata.total}} (table total), or {{getdata.table}}. Great paired with Send HTTP Request or Generate Text with AI.

Search Image

Find a relevant image from Unsplash by keyword

FieldTypeDescription
Search queryTextKeywords to search for, e.g. modern office or a column reference like {{Category}}.supports
OrientationSelectLandscape, Portrait, or Square.
Save into attachment columnSelectOptional — write the image straight into an attachment column of the triggering row (for row-based triggers).

Action Chaining: Reference the image in later actions with {{image.url}}, {{image.name}}, or {{image.photographer}}. Powered by Unsplash.

Random Generator

Generate a random number, or pick one random item from a list

FieldTypeDescription
ModeSelectRandom number (default) or Pick from a list.
Minimum / MaximumNumberNumber mode only — the inclusive range to pick from (swapped values are tolerated).supports
Whole numbers onlyToggleNumber mode — when off, you can choose how many decimal places to return.
ListTextareaList mode — paste items (comma / new-line / semicolon separated) or insert a variable like {{getdata.json}}. The action smartly accepts a JSON array, an object's values, or plain text and breaks it into items.supports
Return fieldTextList mode — when items are JSON objects, return just this field of the chosen item (e.g. name). Leave blank to return the whole item.

Action Chaining: Reference the result with {{random.value}}. In list mode {{random.index}} (0-based position) and {{random.count}} (total items) are also available — e.g. randomly assign a row to one of your team members, or pick a random prize.

Send FruitChat Message

Send a message in a FruitChat conversation

FieldTypeDescription
Send toSelectPick a FruitChat conversation (direct message or group) to send to.
MessageTextareaThe message content.supports

Tip: Use this to alert a team chat when important data changes — e.g., "New order from {{Customer Name}}".

Generate Text with AI

Generate text using your workspace AI

FieldTypeDescription
PromptTextareaThe AI prompt. Can include dynamic column values to provide context.supports

Action Chaining: The generated text is stored and later actions can reference it with {{ai.response}}. For example, generate a summary then email it.

Create Calendar Event

Add an event to a Fruitask calendar

FieldTypeDescription
CalendarSelectChoose which calendar to create the event in.
Event TitleTextThe event name.supports
DescriptionTextareaOptional event description.supports
Start Date/TimeDate + Time pickerUse the date picker, or switch to text mode to enter a column reference like {{DueDate}}.supports
End Date/TimeDate + Time pickerSame as start — supports picker or column reference.supports
All DayCheckboxIf checked, time pickers are hidden and the event spans the full day.
LocationTextOptional event location.supports
ColorColor pickerCustom event color on the calendar.

Tip: Switch dates to text mode to use column references — great for automatically creating calendar events from due dates in your task table.

Export Data

Export the entire table data as a downloadable CSV, JSON, or TSV file

FieldTypeDescription
Export FormatSelectChoose CSV, JSON, or TSV format.
Include HeadersCheckboxInclude column header names as the first row (CSV/TSV only).
Include Child RowsCheckboxInclude nested/child table rows in the export.

Action Chaining: The exported file URL is stored and subsequent actions can reference it with {{export.file_url}}. For example, export data then send the download link via email.

Condition (If / Else Branching)

Run different actions based on row data

The Condition action lets you add if/else branching logic. Define one or more rules — if they pass, the If branch actions run; otherwise the Else branch runs.

Configuration

Logic Operator Choose ALL conditions must match (AND) or ANY condition must match (OR).

Conditions Each rule has: Column, Operator (=, ≠, contains, starts with, is empty, etc.), and Value.

Available Operators

= equals≠ not equalscontainsnot containsstarts withends with> greater than< less thanis emptyis not emptyin (list)not in (list)

Branch Actions

After adding a Condition action, you'll see green (If) and red (Else) add buttons on the canvas. Click them to add actions to each branch. Branch actions support every action type except nested conditions.

Tip: You can use {{ColumnName}} in condition values to compare against dynamic column data.

Test Run

Before enabling your automation, you can test it with real data from your table.

1

Open the automation builder and make sure you have at least one action configured.

2

Click the ▶ Test Run button in the top toolbar.

3

It picks the most recent row from your table and executes all actions in sequence. Each node shows a ✓ or ✗ as it completes.

4

Check the Run Logs drawer for detailed results and any errors.

Warning: Test runs execute real actions — emails will be sent, records will be created, etc. Use test data or a staging workspace.

Run Logs

Every time your automation runs (either from a real trigger or a test), a log entry is created. Click the Run Logs button in the toolbar to open the logs drawer.

Status Each run shows success or failed with a timestamp.

Action Details Expand a log entry to see each action's individual result and any error messages.

Trigger Row See which row triggered the automation and what data was used.

Tips & Tricks

Chain actions for powerful workflows

Actions run in order — use Get Record to fetch data, then reference it in later actions. Use Generate AI Text then email the result.

Use Conditions to route logic

Add a Condition action to branch your workflow. For example: if Status = "Urgent", send a Telegram alert; otherwise, send a regular notification.

Test before you go live

Always use Test Run to verify your automation works correctly. Check the Run Logs for any errors or unexpected values.

Drag nodes to organize your canvas

You can drag action nodes around the canvas to arrange your workflow visually. This layout is saved with the automation.

HTTP Request for anything

The Custom HTTP Request action connects Fruitask to virtually anything — Slack, Discord, Zapier, Make, n8n, or your own internal tools. Just point it at a webhook URL.

Column references are case-insensitive

{{name}} and {{Name}} both work. The system matches by column name from the trigger table.

Multiple email providers

For Send Email, you can use the free Fruitask email, or configure Gmail, Outlook, Yahoo, or any custom SMTP server for branded emails.

Delete action with confirmation

Don't worry about accidental clicks — removing an action from the canvas shows a confirmation dialog before deleting it.

Common Use Cases

New Lead Notification

When a new lead is added, email the sales team and create a calendar follow-up event.

Trigger: Row CreatedSend EmailCreate Calendar Event

Task Status Update

When a task is marked as Done, notify the assignee and update a summary table.

Trigger: Row UpdatedCondition (Status = Done)Send NotificationUpdate Record

AI-Powered Summaries

When a meeting note is created, generate an AI summary and send it to the team chat.

Trigger: Row CreatedGenerate AI TextSend FruitChat Message

Cross-Table Sync

When an order is placed, create a corresponding record in the fulfillment table.

Trigger: Row CreatedCreate Record

External Webhook

When data changes, send a payload to an external service like Slack or Zapier.

Trigger: Row UpdatedCustom HTTP Request

Conditional Alerts

Only send urgent Telegram alerts when priority is High; send regular notifications otherwise.

Trigger: Row CreatedConditionIf → Send TelegramElse → Send Notification

Import Custom Action

The built-in actions cover the most common integrations, but you can add your own. A Custom Action lets you call any external platform — Slack, Monday, Notion, your own backend — as long as it exposes an HTTP API. Under the hood a custom action is simply an HTTP request you describe with a small JSON object, then reuse like any other action in this automation.

1

In the builder, click + Add Action. Scroll to the bottom of the list and click Import Action.

2

Paste your action JSON (or click Use template to start from the Slack example), then click Import.

3

Your action now appears at the top of the action picker (tagged Custom) and is saved to this automation. Add it to the canvas like any other step.

JSON Format

FieldRequiredDescription
labelYesAction name shown in the picker and on the canvas.
endpointYesFull https:// URL the request is sent to.
methodNoHTTP method POST (default), GET, PUT, PATCH, DELETE.
iconNoImage URL for the action icon. A placeholder is shown if omitted.
descriptionNoShort subtitle shown under the label.
headersNoObject of request headers, e.g. Authorization.
bodyNoRequest body — a JSON object or a raw string. Ignored for GET.
keyNoUnique id; importing the same key again replaces it. Auto-generated if omitted.

Example

{
  "label": "Slack: Post Message",
  "description": "Send a message to a Slack channel",
  "icon": "https://cdn.simpleicons.org/slack",
  "method": "POST",
  "endpoint": "https://slack.com/api/chat.postMessage",
  "headers": {
    "Authorization": "Bearer xoxb-your-token",
    "Content-Type": "application/json"
  },
  "body": {
    "channel": "#general",
    "text": "New row:  — status "
  }
}

Dynamic values

Use {{Column}} tokens anywhere in the endpoint, header values, or body they're replaced with the trigger row's data (and outputs of earlier actions) at run time. Values inside the JSON body are auto-escaped.

Using the response

The HTTP response is captured and exposed to later actions: the status code as response.code, the full body as response, and any JSON field by key (response.id, response.data.url). Pick them from the variable menu in any field of a later step.

Security: tokens and API keys you put in headers are stored with the automation and used server-side only — they are never exposed in the browser to other members. Treat the automation as you would any secret store.

External Database (BYOD)

The External Database plugin lets you connect any REST API as a live data source for a table. Instead of storing rows in Fruitask's built-in database, every CRUD operation is proxied to your API endpoints.

Setup Steps

  1. Install & enable the External Database (BYOD) plugin from Add-ons.
  2. Open the table you want to connect and switch to the External DB plugin view.
  3. Toggle Enable External Data Source on.
  4. Enter your API Base URL, authentication header/value, and configure each CRUD endpoint path.
  5. Set the ID Field and optional Response Data Path (dot-notation to the array in JSON response).
  6. Map Fruitask columns to your external API fields under Column Mapping.
  7. Click Test Connection to verify.
  8. Click Save Settings.

How It Works

  • List: When the table loads, Fruitask calls your list endpoint and maps the response to table rows.
  • Create: Adding a new row sends a POST to your create endpoint with mapped field data.
  • Update: Editing a cell or row sends a PUT/PATCH to your update endpoint with the record ID.
  • Delete: Deleting a row sends a DELETE request to your delete endpoint.

API Requirements

  • Your list endpoint must return a JSON array of objects (or an object with a nested array at the configured data path).
  • Each object must have a unique ID field (default: id).
  • Use :id in update/delete paths as a placeholder for the record ID.
  • Auth is sent as a custom header (e.g. Authorization: Bearer token).

Frequently Asked Questions

Need more help? Reach out to us on FruitChat or email support.