<!-- BusyBot node reference — https://busybot.net/tools/filemaker/ -->

> Node: FileMaker (`filemaker`) · Action · v1
> Category: Data & Storage · Credentials: FileMaker API (`fileMakerApi`)
> Updated: 2026-08-16

# 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](https://busybot.net/credentials/file-maker-api/) 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:

```json
{
  "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:

```json
{
  "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:

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

Page through a layout, sorted:

```json
{
  "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:

```json
{
  "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:

```json
{
  "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:

```json
{
  "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:

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

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

Run a server-side script:

```json
{
  "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.