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.
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
| Direction | Port(s) |
|---|---|
| Input | Input |
| Output | Output, 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.
| Operation | Value | Description |
|---|---|---|
| Create Record | create | Create a record on the layout |
| Delete Record | delete | Delete a record by its internal record ID |
| Duplicate Record | duplicate | Copy an existing record |
| Edit Record | edit | Change field values on an existing record |
| Find Records | find | Run a FileMaker find with query criteria |
| Get Records | records | Return a page of records from the layout |
| Get Record By ID | record | Return one record by its internal record ID |
| Perform Script | performscript | Run a server-side FileMaker script |
Parameters
Create Record (create)
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Fields | fixedCollection | No | {} | Field name-value pairs to set on the record. |
| — Field Name | string | No | — | The field name as defined in the FileMaker layout. |
| — Value | string | No | — | The value to set for this field. |
Delete Record (delete)
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Record ID | number | Yes | — | Internal Record ID returned by FileMaker (the recordId field from API responses). |
Duplicate Record (duplicate)
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Record ID | number | Yes | — | Internal Record ID returned by FileMaker (the recordId field from API responses). |
Edit Record (edit)
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Record ID | number | Yes | — | Internal Record ID returned by FileMaker (the recordId field from API responses). |
| Mod ID | number | No | — | The last modification ID. When provided, the record is edited only when the modId matches (optimistic locking). |
| Fields | fixedCollection | No | {} | Field name-value pairs to set on the record. |
| — Field Name | string | No | — | The field name as defined in the FileMaker layout. |
| — Value | string | No | — | The value to set for this field. |
Find Records (find)
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Offset | number | No | 1 | The record number of the first record in the range (1-based). |
| Limit | number | No | 100 | Maximum number of records to return. |
| Response Layout | string | No | — | Alternative layout to use for the response data. Leave empty to use the main layout. |
| Queries | fixedCollection | No | {} | Query criteria for finding records. Multiple queries are OR’d together. |
| — Fields | fixedCollection | No | {} | Fields and values to search for in this query. Multiple fields within one query are AND’d together. |
| — — Field Name | string | No | — | The field name to search. Use the field name as defined in the FileMaker layout. |
| — — Value | string | No | — | The value to search for. Supports FileMaker find operators (e.g., “=exact”, “>100”, “..2024-01-01”). |
| — Omit | boolean | No | false | Whether to omit (exclude) records matching this query criteria. |
| Get Portals | boolean | No | false | Whether to include portal (related record) data in the response. |
| Portals | string | No | — | Comma-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? | boolean | No | false | Whether to sort the returned records. |
| Sort Rules | fixedCollection | No | {} | Sort rules applied to the result set. (shown when Sort Data? is true) |
| — Field Name | string | No | — | The field name to sort by. |
| — Order | options | No | ascend | Sort order for this field. |
Options: ascend, descend | ||||
| Before Find Script | boolean | No | false | Whether to run a script before the action (prerequest). |
Script Name (scriptBefore) | string | Yes | — | Name of the FileMaker script to run before the action (prerequest). (shown when Before Find Script is true) |
Script Parameter (scriptBeforeParam) | string | No | — | Parameter to pass to the prerequest script. (shown when Before Find Script is true) |
| Before Sort Script | boolean | No | false | Whether to run a script after the action but before sorting (presort). |
Script Name (scriptSort) | string | Yes | — | Name of the FileMaker script to run before sorting (presort). (shown when Before Sort Script is true) |
Script Parameter (scriptSortParam) | string | No | — | Parameter to pass to the presort script. (shown when Before Sort Script is true) |
| After Sort Script | boolean | No | false | Whether to run a script after the action and after sorting. |
Script Name (scriptAfter) | string | Yes | — | Name of the FileMaker script to run after the action and sort. (shown when After Sort Script is true) |
Script Parameter (scriptAfterParam) | string | No | — | Parameter to pass to the after-sort script. (shown when After Sort Script is true) |
Get Records (records)
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Offset | number | No | 1 | The record number of the first record in the range (1-based). |
| Limit | number | No | 100 | Maximum number of records to return. |
| Get Portals | boolean | No | false | Whether to include portal (related record) data in the response. |
| Portals | string | No | — | Comma-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? | boolean | No | false | Whether to sort the returned records. |
| Sort Rules | fixedCollection | No | {} | Sort rules applied to the result set. (shown when Sort Data? is true) |
| — Field Name | string | No | — | The field name to sort by. |
| — Order | options | No | ascend | Sort order for this field. |
Options: ascend, descend | ||||
| Before Find Script | boolean | No | false | Whether to run a script before the action (prerequest). |
Script Name (scriptBefore) | string | Yes | — | Name of the FileMaker script to run before the action (prerequest). (shown when Before Find Script is true) |
Script Parameter (scriptBeforeParam) | string | No | — | Parameter to pass to the prerequest script. (shown when Before Find Script is true) |
| Before Sort Script | boolean | No | false | Whether to run a script after the action but before sorting (presort). |
Script Name (scriptSort) | string | Yes | — | Name of the FileMaker script to run before sorting (presort). (shown when Before Sort Script is true) |
Script Parameter (scriptSortParam) | string | No | — | Parameter to pass to the presort script. (shown when Before Sort Script is true) |
| After Sort Script | boolean | No | false | Whether to run a script after the action and after sorting. |
Script Name (scriptAfter) | string | Yes | — | Name of the FileMaker script to run after the action and sort. (shown when After Sort Script is true) |
Script Parameter (scriptAfterParam) | string | No | — | Parameter to pass to the after-sort script. (shown when After Sort Script is true) |
Get Record By ID (record)
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Record ID | number | Yes | — | Internal Record ID returned by FileMaker (the recordId field from API responses). |
| Get Portals | boolean | No | false | Whether to include portal (related record) data in the response. |
| Portals | string | No | — | Comma-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 Script | boolean | No | false | Whether to run a script before the action (prerequest). |
Script Name (scriptBefore) | string | Yes | — | Name of the FileMaker script to run before the action (prerequest). (shown when Before Find Script is true) |
Script Parameter (scriptBeforeParam) | string | No | — | Parameter to pass to the prerequest script. (shown when Before Find Script is true) |
| Before Sort Script | boolean | No | false | Whether to run a script after the action but before sorting (presort). |
Script Name (scriptSort) | string | Yes | — | Name of the FileMaker script to run before sorting (presort). (shown when Before Sort Script is true) |
Script Parameter (scriptSortParam) | string | No | — | Parameter to pass to the presort script. (shown when Before Sort Script is true) |
| After Sort Script | boolean | No | false | Whether to run a script after the action and after sorting. |
Script Name (scriptAfter) | string | Yes | — | Name of the FileMaker script to run after the action and sort. (shown when After Sort Script is true) |
Script Parameter (scriptAfterParam) | string | No | — | Parameter to pass to the after-sort script. (shown when After Sort Script is true) |
Perform Script (performscript)
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
Script Name (script) | string | Yes | — | The name of the FileMaker script to execute. |
Script Parameter (scriptParam) | string | No | — | A parameter to pass to the script. |
All Actions
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Action | options | No | record | The action to perform on the FileMaker database. |
Options: create, delete, duplicate, edit, find, records, record, performscript | ||||
| Layout | string | Yes | — | FileMaker 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 Concurrency | number | No | 5 | Maximum 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.
| Action | What lands on response |
|---|---|
create | The identifiers FileMaker assigned to the new record. |
edit, delete, duplicate | FileMaker’s confirmation for the affected record. |
record, records, find | data — an array of matched records, each with its field values, its internal record ID, and its portal data when Get Portals is on. |
performscript | The 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
| Mode | Behavior |
|---|---|
| stop | Halts workflow on first error |
| continue | Skips failed items, passes successful ones through |
| errorPort | Routes 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 BusyBotLast updated . Spotted something wrong? Tell us.