Reference · Tools

FileMaker

Interact with the FileMaker Data API to create, read, update, delete, duplicate, and search records, as well as execute scripts in a FileMaker database.

Action Data & Storage v1

The FileMaker node connects your BusyBot workflows to a Claris FileMaker database using the REST-based Data API. You can create, read, update, delete, duplicate, and search records across any layout, as well as trigger server-side scripts — making it straightforward to build things like automated invoice generation or nightly data sync pipelines that write directly into FileMaker.

Node type
Action
Parameters
25
Outputs
Output, Error
Credentials
FileMaker API

FileMaker

Manage records and scripts in a FileMaker database

Overview

Claris FileMaker is a low-code database platform. This tool uses the FileMaker Data API (REST) to perform record CRUD operations, find records with complex queries, duplicate records, and execute server-side scripts. It uses session-based authentication where a token is obtained at the start and released at the end of processing. The API operates on layouts, which define the view of the underlying data. Script hooks (prerequest, presort, after-sort) can be attached to most operations.

Category: Data & Storage
Tool Name: filemaker
Version: 1

Appearance: Icon: lucide-Database | Color: #4A90D9

Node Type

Action — processes input items and produces output

Input / Output

DirectionPort(s)
InputInput
OutputOutput, Error

Credentials

This tool requires FileMaker API credentials. See the Credentials Guide for setup instructions.

Operations

This node’s operation selector is the Action parameter.

OperationValueDescription
Create RecordcreateCreate a record on the layout
Delete RecorddeleteDelete a record by its internal record ID
Duplicate RecordduplicateCopy an existing record
Edit RecordeditChange field values on an existing record
Find RecordsfindRun a FileMaker find with query criteria
Get RecordsrecordsReturn a page of records from the layout
Get Record By IDrecordReturn one record by its internal record ID
Perform ScriptperformscriptRun a server-side FileMaker script

Parameters

Create Record (create)

ParameterTypeRequiredDefaultDescription
FieldsfixedCollectionNo{}Field name-value pairs to set on the record.
— Field NamestringNoThe field name as defined in the FileMaker layout.
— ValuestringNoThe value to set for this field.

Delete Record (delete)

ParameterTypeRequiredDefaultDescription
Record IDnumberYesInternal Record ID returned by FileMaker (the recordId field from API responses).

Duplicate Record (duplicate)

ParameterTypeRequiredDefaultDescription
Record IDnumberYesInternal Record ID returned by FileMaker (the recordId field from API responses).

Edit Record (edit)

ParameterTypeRequiredDefaultDescription
Record IDnumberYesInternal Record ID returned by FileMaker (the recordId field from API responses).
Mod IDnumberNoThe last modification ID. When provided, the record is edited only when the modId matches (optimistic locking).
FieldsfixedCollectionNo{}Field name-value pairs to set on the record.
— Field NamestringNoThe field name as defined in the FileMaker layout.
— ValuestringNoThe value to set for this field.

Find Records (find)

ParameterTypeRequiredDefaultDescription
OffsetnumberNo1The record number of the first record in the range (1-based).
LimitnumberNo100Maximum number of records to return.
Response LayoutstringNoAlternative layout to use for the response data. Leave empty to use the main layout.
QueriesfixedCollectionNo{}Query criteria for finding records. Multiple queries are OR’d together.
— FieldsfixedCollectionNo{}Fields and values to search for in this query. Multiple fields within one query are AND’d together.
— — Field NamestringNoThe field name to search. Use the field name as defined in the FileMaker layout.
— — ValuestringNoThe value to search for. Supports FileMaker find operators (e.g., “=exact”, “>100”, “..2024-01-01”).
— OmitbooleanNofalseWhether to omit (exclude) records matching this query criteria.
Get PortalsbooleanNofalseWhether to include portal (related record) data in the response.
PortalsstringNoComma-separated list of portal object names or portal table names to include. If empty, all portal data for the layout is returned. For best performance, specify portal names explicitly. (shown when Get Portals is true)
Sort Data?booleanNofalseWhether to sort the returned records.
Sort RulesfixedCollectionNo{}Sort rules applied to the result set. (shown when Sort Data? is true)
— Field NamestringNoThe field name to sort by.
— OrderoptionsNoascendSort order for this field.
Options: ascend, descend
Before Find ScriptbooleanNofalseWhether to run a script before the action (prerequest).
Script Name (scriptBefore)stringYesName of the FileMaker script to run before the action (prerequest). (shown when Before Find Script is true)
Script Parameter (scriptBeforeParam)stringNoParameter to pass to the prerequest script. (shown when Before Find Script is true)
Before Sort ScriptbooleanNofalseWhether to run a script after the action but before sorting (presort).
Script Name (scriptSort)stringYesName of the FileMaker script to run before sorting (presort). (shown when Before Sort Script is true)
Script Parameter (scriptSortParam)stringNoParameter to pass to the presort script. (shown when Before Sort Script is true)
After Sort ScriptbooleanNofalseWhether to run a script after the action and after sorting.
Script Name (scriptAfter)stringYesName of the FileMaker script to run after the action and sort. (shown when After Sort Script is true)
Script Parameter (scriptAfterParam)stringNoParameter to pass to the after-sort script. (shown when After Sort Script is true)

Get Records (records)

ParameterTypeRequiredDefaultDescription
OffsetnumberNo1The record number of the first record in the range (1-based).
LimitnumberNo100Maximum number of records to return.
Get PortalsbooleanNofalseWhether to include portal (related record) data in the response.
PortalsstringNoComma-separated list of portal object names or portal table names to include. If empty, all portal data for the layout is returned. For best performance, specify portal names explicitly. (shown when Get Portals is true)
Sort Data?booleanNofalseWhether to sort the returned records.
Sort RulesfixedCollectionNo{}Sort rules applied to the result set. (shown when Sort Data? is true)
— Field NamestringNoThe field name to sort by.
— OrderoptionsNoascendSort order for this field.
Options: ascend, descend
Before Find ScriptbooleanNofalseWhether to run a script before the action (prerequest).
Script Name (scriptBefore)stringYesName of the FileMaker script to run before the action (prerequest). (shown when Before Find Script is true)
Script Parameter (scriptBeforeParam)stringNoParameter to pass to the prerequest script. (shown when Before Find Script is true)
Before Sort ScriptbooleanNofalseWhether to run a script after the action but before sorting (presort).
Script Name (scriptSort)stringYesName of the FileMaker script to run before sorting (presort). (shown when Before Sort Script is true)
Script Parameter (scriptSortParam)stringNoParameter to pass to the presort script. (shown when Before Sort Script is true)
After Sort ScriptbooleanNofalseWhether to run a script after the action and after sorting.
Script Name (scriptAfter)stringYesName of the FileMaker script to run after the action and sort. (shown when After Sort Script is true)
Script Parameter (scriptAfterParam)stringNoParameter to pass to the after-sort script. (shown when After Sort Script is true)

Get Record By ID (record)

ParameterTypeRequiredDefaultDescription
Record IDnumberYesInternal Record ID returned by FileMaker (the recordId field from API responses).
Get PortalsbooleanNofalseWhether to include portal (related record) data in the response.
PortalsstringNoComma-separated list of portal object names or portal table names to include. If empty, all portal data for the layout is returned. For best performance, specify portal names explicitly. (shown when Get Portals is true)
Before Find ScriptbooleanNofalseWhether to run a script before the action (prerequest).
Script Name (scriptBefore)stringYesName of the FileMaker script to run before the action (prerequest). (shown when Before Find Script is true)
Script Parameter (scriptBeforeParam)stringNoParameter to pass to the prerequest script. (shown when Before Find Script is true)
Before Sort ScriptbooleanNofalseWhether to run a script after the action but before sorting (presort).
Script Name (scriptSort)stringYesName of the FileMaker script to run before sorting (presort). (shown when Before Sort Script is true)
Script Parameter (scriptSortParam)stringNoParameter to pass to the presort script. (shown when Before Sort Script is true)
After Sort ScriptbooleanNofalseWhether to run a script after the action and after sorting.
Script Name (scriptAfter)stringYesName of the FileMaker script to run after the action and sort. (shown when After Sort Script is true)
Script Parameter (scriptAfterParam)stringNoParameter to pass to the after-sort script. (shown when After Sort Script is true)

Perform Script (performscript)

ParameterTypeRequiredDefaultDescription
Script Name (script)stringYesThe name of the FileMaker script to execute.
Script Parameter (scriptParam)stringNoA parameter to pass to the script.

All Actions

ParameterTypeRequiredDefaultDescription
ActionoptionsNorecordThe action to perform on the FileMaker database.
Options: create, delete, duplicate, edit, find, records, record, performscript
LayoutstringYesFileMaker layout name. All operations require a layout context. Find layout names in FileMaker Pro under Layouts menu or via the FileMaker Data API metadata endpoint.
Max ConcurrencynumberNo5Maximum number of items to process concurrently. Keep low to avoid exhausting FileMaker session limits. Accepts 1–50.

Output Data

Every action produces exactly one output item per input item — nothing fans out, including find and records. The Data API response envelope is merged onto the input item’s JSON, so the properties you started with remain available. Binary data on the input item is forwarded.

The envelope has two top-level keys: response, which holds the result, and messages, which holds FileMaker’s status codes — code 0 means success.

ActionWhat lands on response
createThe identifiers FileMaker assigned to the new record.
edit, delete, duplicateFileMaker’s confirmation for the affected record.
record, records, finddata — an array of matched records, each with its field values, its internal record ID, and its portal data when Get Portals is on.
performscriptThe script’s result and error code.

Because records arrive as an array on one item, add a Split Out node on response.data when you want to process each record separately:

{
  "response": {
    "data": []
  },
  "messages": [
    { "code": "0", "message": "OK" }
  ]
}

Field values live under each record’s fieldData, and related records under portalData, exactly as the FileMaker Data API returns them. The internal recordId from a read is what you pass to Record ID on edit, delete and duplicate.

Reference results downstream by expression, e.g. {{ $json.response.data[0].fieldData.name }} or {{ $json.messages[0].code }}.

Usage Examples

  • Create a new contact record in FileMaker
  • Find all invoices from last month using a query
  • Update a customer record by record ID
  • Delete a record from a FileMaker layout
  • Duplicate an existing record
  • Execute a FileMaker server-side script
  • Get all records from a layout with pagination

Example Configuration

Create a record:

{
  "type": "filemaker",
  "parameters": {
    "action": "create",
    "layout": "Contacts",
    "fieldsParametersUi": {
      "fields": [
        { "name": "first_name", "value": "{{ $json.firstName }}" },
        { "name": "last_name", "value": "{{ $json.lastName }}" },
        { "name": "email", "value": "{{ $json.email }}" }
      ]
    }
  }
}

Read one record by its internal record ID, including related records:

{
  "type": "filemaker",
  "parameters": {
    "action": "record",
    "layout": "Contacts",
    "recid": "{{ $json.recordId }}",
    "getPortals": true,
    "portals": "Orders,Notes"
  }
}

Page through a layout, sorted:

{
  "type": "filemaker",
  "parameters": {
    "action": "records",
    "layout": "Invoices",
    "offset": 1,
    "limit": 100,
    "setSort": true,
    "sortParametersUi": {
      "rules": [
        { "name": "invoice_date", "value": "descend" },
        { "name": "invoice_number", "value": "ascend" }
      ]
    }
  }
}

Find records — fields inside one query are AND’d, separate queries are OR’d, and omit excludes matches:

{
  "type": "filemaker",
  "parameters": {
    "action": "find",
    "layout": "Invoices",
    "offset": 1,
    "limit": 50,
    "queries": {
      "query": [
        {
          "fields": {
            "field": [
              { "name": "status", "value": "=Unpaid" },
              { "name": "total", "value": ">1000" }
            ]
          },
          "omit": false
        },
        {
          "fields": {
            "field": [
              { "name": "status", "value": "=Void" }
            ]
          },
          "omit": true
        }
      ]
    },
    "responseLayout": "Invoices_Summary"
  }
}

Run a prerequest script before the find:

{
  "type": "filemaker",
  "parameters": {
    "action": "find",
    "layout": "Invoices",
    "queries": {
      "query": [
        {
          "fields": {
            "field": [
              { "name": "customer_id", "value": "={{ $json.customerId }}" }
            ]
          },
          "omit": false
        }
      ]
    },
    "setScriptBefore": true,
    "scriptBefore": "RefreshCache",
    "scriptBeforeParam": "{{ $json.customerId }}"
  }
}

Edit a record with optimistic locking — the write fails if the record changed since you read it:

{
  "type": "filemaker",
  "parameters": {
    "action": "edit",
    "layout": "Contacts",
    "recid": "{{ $json.recordId }}",
    "modId": "{{ $json.modId }}",
    "fieldsParametersUi": {
      "fields": [
        { "name": "status", "value": "Active" }
      ]
    }
  }
}

Duplicate a record, then delete another:

{
  "type": "filemaker",
  "parameters": {
    "action": "duplicate",
    "layout": "Contacts",
    "recid": "{{ $json.recordId }}"
  }
}
{
  "type": "filemaker",
  "parameters": {
    "action": "delete",
    "layout": "Contacts",
    "recid": "{{ $json.recordId }}"
  }
}

Run a server-side script:

{
  "type": "filemaker",
  "parameters": {
    "action": "performscript",
    "layout": "Contacts",
    "script": "GenerateMonthlyReport",
    "scriptParam": "{{ $json.month }}"
  }
}

Error Handling

ModeBehavior
stopHalts workflow on first error
continueSkips failed items, passes successful ones through
errorPortRoutes failed items to Error output port

Tips

Manage records and execute scripts in a Claris FileMaker database via the Data API.

Frequently asked questions

What credentials do I need to connect to FileMaker?

You need a FileMaker API credential (credential type: fileMakerApi). This is separate from a standard FileMaker account login. The node handles session-based authentication automatically — it obtains a token at the start of each operation and releases it when processing is complete, so you don't manage session tokens manually.

Why does the node work against a 'layout' rather than a table directly?

The FileMaker Data API operates on layouts, not raw tables. A layout defines which fields and related records are exposed. This means two layouts can sit on top of the same underlying table but return different fields. You need to target a layout that includes every field your workflow needs to read or write.

Can I run a FileMaker script as part of my workflow?

Yes. The node supports executing server-side scripts in your FileMaker database. You can also attach script hooks — prerequest, presort, and after-sort — to most record operations, letting you trigger FileMaker logic at specific points within a find or sort rather than only after the operation completes.

What happens when an operation fails — does the whole workflow stop?

No. The node has two separate outputs: Output and Error. A failed API call routes to the Error output rather than halting the workflow, so you can branch your logic to handle errors — logging them, sending an alert, or retrying — without the entire automation failing.

Can I search for records with multiple conditions, not just a simple lookup?

Yes. The node supports find operations with complex queries, matching the FileMaker Data API's ability to combine multiple criteria across fields. This covers the equivalent of FileMaker's native Find mode requests, including omit conditions, so you're not limited to single-field exact-match lookups.

Build with the FileMaker node

Drop it into a workflow, wire it to an agent, or call it on a schedule. You'll need FileMaker API credentials first.

Open BusyBot

Last updated . Spotted something wrong? Tell us.