Enrichment Node
Quick Reference
- Output Field Name: The field name on the record where the enrichment result is stored. Original record fields are kept; the result is added alongside them. Default:
enrichment. - Provider: Select Google BigQuery, Database (Postgres), HTTP Client, Fetch HTML or In-Memory Lookup.
- Credential: Google BigQuery; selects an API-key credential holding the service-account JSON.
- Query Template: Google BigQuery or Database (Postgres).
- Database connection: Database (Postgres); selects a database credential.
- URL: HTTP Client or Fetch HTML.
- Method: HTTP Client.
- Type: HTTP Client → Authorization (optional); None, Basic Auth or Bearer Token.
- Username/password credential: HTTP Client → Authorization (optional), Type = Basic Auth.
- API key credential: HTTP Client → Authorization (optional), Type = Bearer Token.
- Key: HTTP Client → Headers (optional); repeatable map entries; map-entry key.
- Value: HTTP Client → Headers (optional); repeatable map entries; value for that key.
- HTTP Body (optional): HTTP Client with a method other than GET.
- Extract plain text from HTML: Fetch HTML.
- Lookup source: In-Memory Lookup; CSV upload or LDAP.
- Upload CSV file: In-Memory Lookup → CSV upload; file button and adjacent unlabeled paste area edit the same CSV content.
- Delimiter: CSV upload.
- CSV has a header row: CSV upload.
- Column names: CSV upload, only when CSV has a header row is off.
- LDAP URL: LDAP.
- Bind credential: LDAP; username/password credential selection.
- Base DN: LDAP.
- Search filter: LDAP.
- Attributes (optional): LDAP.
- Search scope: LDAP.
- Page size (optional): LDAP.
- Time limit ms (optional): LDAP.
- Key column: In-Memory Lookup → Lookup keys; paired row with Lookup key template.
- Lookup key template: In-Memory Lookup → Lookup keys; + Add pair appends a pair.
- On miss: In-Memory Lookup; Pass through (leave event unchanged), Set output to null or Fail the event.
- Refresh interval seconds (optional): In-Memory Lookup.
Provider determines which group of fields is shown. Credential values belong to the selected credential, not to additional node inputs. Database connection binds provider.credentialId. The CSV paste area has no separate field label; find it next to Upload CSV file.
For JSON/MCP configuration, Enrichment also supports AWS Lambda with provider.type: "aws_lambda". Set provider.functionName, provider.regionStr, provider.credentialId (a Username/Password credential holding AWS access keys), and provider.payloadPathExpressionStr (for example $.order). This provider is not an option in the current builder's Provider selector.
Workflow Builder fields
Configuration keys below are relative to the node configuration. Use the field name in the panel when following instructions in the builder; required markers such as an asterisk are not part of the name.
| Field in the panel | Configuration key | Where to edit / when shown |
|---|---|---|
| Output Field Name | outputFieldName | Node panel — The field name on the record where the enrichment result is stored. Original record fields are kept; the result is added alongside them. Default: enrichment. Required: Yes. |
| Provider | provider.type | Select Google BigQuery, Database (Postgres), HTTP Client, Fetch HTML or In-Memory Lookup — The external data source to query. Selecting a provider reveals its provider-specific fields (see below). Required: Yes. |
| Credential | provider.credentialId | Google BigQuery; selects an API-key credential holding the service-account JSON — A credential holding a Google Service Account Key in JSON format. See Google's guide for creating one. Required: Yes. |
| Query Template | provider.queryTemplate | Google BigQuery or Database (Postgres) — The SQL query to run. Use {{$.field}} placeholders to inject values from the record. Required: Yes. |
| Database connection | provider.credentialId | Database (Postgres); selects a database credential — A database credential containing the JDBC URL (e.g. jdbc:postgresql://localhost:5432/mydb) and, if required, a username and password. Required: Yes. |
| URL | provider.urlTemplate | HTTP Client or Fetch HTML — The page to fetch. Use {{$.field}} placeholders to build a dynamic URL, e.g. https://example.com/{{$.path}}. Required: Yes. |
| Method | provider.method | HTTP Client — The HTTP method: GET, POST, PUT, or DELETE. Default: GET. Required: Yes. |
| Type | provider.auth.type | HTTP Client → Authorization (optional); None, Basic Auth or Bearer Token |
| Username/password credential | provider.auth.credentialId | HTTP Client → Authorization (optional), Type = Basic Auth |
| API key credential | provider.auth.credentialId | HTTP Client → Authorization (optional), Type = Bearer Token |
| Key | provider.headerTemplates.* | HTTP Client → Headers (optional); repeatable map entries; map-entry key |
| Value | provider.headerTemplates.* | HTTP Client → Headers (optional); repeatable map entries; value for that key |
| HTTP Body (optional) | provider.payloadTemplate | HTTP Client with a method other than GET |
| Extract plain text from HTML | provider.extractText | Fetch HTML — When checked, HTML markup is stripped and only the visible text is returned. When unchecked, the full HTML document is returned. Default: Unchecked. Required: No. |
| Lookup source | provider.source.type | In-Memory Lookup; CSV upload or LDAP |
| Upload CSV file | provider.source.csvContent | In-Memory Lookup → CSV upload; file button and adjacent unlabeled paste area edit the same CSV content |
| Delimiter | provider.source.delimiter | CSV upload — The character separating columns in the CSV. Default: ,. Required: No. |
| CSV has a header row | provider.source.hasHeader | CSV upload — When checked, the first row is used as column names. When unchecked, you must supply column names explicitly. Default: Checked. Required: No. |
| Column names | provider.source.columnNames[] | CSV upload, only when CSV has a header row is off |
| LDAP URL | provider.source.ldapUrl | LDAP — The directory server URL. Required: Yes. |
| Bind credential | provider.source.credentialId | LDAP; username/password credential selection — A Username/Password credential used to bind to the directory. Required: Yes. |
| Base DN | provider.source.baseDn | LDAP — The base distinguished name to search under. Required: Yes. |
| Search filter | provider.source.searchFilter | LDAP — The LDAP search filter that selects the entries to load. Required: Yes. |
| Attributes (optional) | provider.source.attributes[] | LDAP — The attributes to return for each entry. Leave empty to return all attributes. Default: All. Required: No. |
| Search scope | provider.source.searchScope | LDAP — How deep to search: Subtree, One level, or Object. Default: Subtree. Required: No. |
| Page size (optional) | provider.source.pageSize | LDAP — Number of entries fetched per page during the directory scan. When blank, the runtime uses 1000. Required: No. |
| Time limit ms (optional) | provider.source.timeLimitMs | LDAP — Maximum time, in milliseconds, allowed for the directory search. When blank, the runtime uses 30000. Required: No. |
| Key column | provider.keyColumns[] | In-Memory Lookup → Lookup keys; paired row with Lookup key template |
| Lookup key template | provider.lookupKeyTemplates[] | In-Memory Lookup → Lookup keys; + Add pair appends a pair |
| On miss | provider.onMiss | In-Memory Lookup; Pass through (leave event unchanged), Set output to null or Fail the event — What to do when no row matches: Pass through (leave event unchanged) leaves the record unchanged, Set output to null sets the output field to null, and Fail the event fails the record. Default: Pass through (leave event unchanged). Required: No. |
| Refresh interval seconds (optional) | provider.refreshIntervalSeconds | In-Memory Lookup — How often to reload the table from the source. Leave empty to load once at startup and never refresh. Default: Load once. Required: No. |
Provider determines which group of fields is shown. Credential values belong to the selected credential, not to additional node inputs. Database connection binds provider.credentialId. The CSV paste area has no separate field label; find it next to Upload CSV file.
Overview
The Enrichment Node improves your data by looking up additional information from an external source and attaching it to each record. Every incoming record triggers a lookup — a query, an API call, or an in-memory table lookup — and the result is stored on the record under the Output Field Name you choose.
Use it to add reference data (product details, user profiles, geo data), validate values against an authoritative source, or pull in context that isn't present in the raw record.
JSON/MCP configuration also supports AWS Lambda (provider.type: "aws_lambda"): send selected record data to a function and attach its JSON response.
How It Works
Suppose every input record carries an order_id:
{
"order_id": 123
}
The node is configured with Output Field Name enrichment and a query template that looks up order details. For record order_id = 123, the data source returns:
{
"product_id": 11,
"quantity": 5,
"price": 100,
"currency": "USD"
}
Fleak attaches that result to the original record under enrichment:
{
"order_id": 123,
"enrichment": {
"product_id": 11,
"quantity": 5,
"price": 100,
"currency": "USD"
}
}
The original record fields are always preserved — the enrichment result is added alongside them. After the enrichment node, use a SQL or Eval node to flatten or reshape the attached data.
SQL-based providers (BigQuery, Database) return an array of rows, since a query can match multiple records. The HTTP Client and Fetch HTML providers return a string. The In-Memory Lookup provider returns a single record (the matched row). AWS Lambda parses the function's response as JSON, preserving its structure.
Configuration
| Field | Description | Required | Default |
|---|---|---|---|
| Output Field Name | The field name on the record where the enrichment result is stored. Original record fields are kept; the result is added alongside them. | Yes | enrichment |
| Provider | The external data source to query. Selecting a provider reveals its provider-specific fields (see below). | Yes | — |
For JSON/MCP configuration, use the node command name enrichment. AWS Lambda uses provider.type: "aws_lambda" and requires provider.functionName, provider.regionStr, provider.credentialId, and provider.payloadPathExpressionStr, together with outputFieldName. See its configuration example below; these provider fields are configured through JSON/MCP rather than the current builder form.
Providers
In-Memory Lookup
The In-Memory Lookup provider loads a reference table into memory once (and optionally refreshes it on a schedule), then matches each record against it by key. This is the fastest option because no network call happens per record — it's ideal for small-to-medium static reference tables such as status code mappings, country lookups, or user directories.
The table comes from one of two Lookup source types: CSV upload or LDAP.
CSV upload source

| Field | Description | Required | Default |
|---|---|---|---|
| Upload CSV file (or the adjacent unlabeled paste area) | The CSV table to load. Paste the content directly or upload a file. | Yes | — |
| Delimiter | The character separating columns in the CSV. | No | , |
| CSV has a header row | When checked, the first row is used as column names. When unchecked, you must supply column names explicitly. | No | Checked |
LDAP source

| Field | Description | Required | Default |
|---|---|---|---|
| LDAP URL | The directory server URL. | Yes | — |
| Bind credential | A Username/Password credential used to bind to the directory. | Yes | — |
| Base DN | The base distinguished name to search under. | Yes | — |
| Search filter | The LDAP search filter that selects the entries to load. | Yes | — |
| Attributes (optional) | The attributes to return for each entry. Leave empty to return all attributes. | No | All |
| Search scope | How deep to search: Subtree, One level, or Object. | No | Subtree |
| Page size (optional) | Number of entries fetched per page during the directory scan. | No | 1000 |
| Time limit ms (optional) | Maximum time, in milliseconds, allowed for the directory search. | No | 30000 |
The defaults for Page size (optional) and Time limit ms (optional) above are runtime fallbacks when the inputs are blank, not prefilled input values. Each loaded LDAP entry becomes a row containing its dn plus the requested attributes.
Lookup keys, On miss, and Refresh interval
These fields apply to both source types:
| Field | Description | Required | Default |
|---|---|---|---|
| Lookup keys | One or more pairs that define how an record is matched to a table row. Key column is the column name in the loaded table; Lookup key template is the value resolved from the record (e.g. {{$.response_code}}). Add multiple pairs for a composite key — all parts must match. | Yes | — |
| On miss | What to do when no row matches: Pass through (leave event unchanged) leaves the record unchanged, Set output to null sets the output field to null, and Fail the event fails the record. | No | Pass through (leave event unchanged) |
| Refresh interval seconds (optional) | How often to reload the table from the source. Leave empty to load once at startup and never refresh. | No | Load once |
In the screenshots above, the Key column http_status is matched against the record value {{$.response_code}} — for an record with response_code = 200, the node finds the table row whose http_status is 200 and attaches that row.
Google BigQuery

Runs a SQL query against Google BigQuery for each record and attaches the matching rows.
| Field | Description | Required |
|---|---|---|
| Credential | A credential holding a Google Service Account Key in JSON format. See Google's guide for creating one. | Yes |
| Query Template | The SQL query to run. Use {{$.field}} placeholders to inject values from the record. | Yes |
SELECT
user_id,
SUM(purchase_amount) as total_spent
FROM
`bigquery-public-data.dataset.table`
WHERE
user_id = '{{$.path.to.value}}'
GROUP BY
user_id;
Database (Postgres)

Runs a SQL query against a relational database over JDBC for each record and attaches the matching rows.
| Field | Description | Required |
|---|---|---|
| Database connection | A database credential containing the JDBC URL (e.g. jdbc:postgresql://localhost:5432/mydb) and, if required, a username and password. | Yes |
| Query Template | The SQL query to run. Use {{$.field}} placeholders to inject values from the record. | Yes |
SELECT *
FROM users
WHERE id = '{{$.user_id}}';
For an record with user_id = 123, Fleak resolves the placeholder and sends WHERE id = '123' to the database.
AWS Lambda
The AWS Lambda provider invokes a function for each incoming record and attaches its JSON response under outputFieldName. It is available through JSON/MCP configuration of the enrichment node; the current builder's Provider selector does not include it.
| Configuration key | Type | Description | Required |
|---|---|---|---|
outputFieldName | String | The field to receive the function's result, for example lambda_result. | Yes |
provider.type | String | Set to aws_lambda. | Yes |
provider.functionName | String | The name of the Lambda function to invoke. | Yes |
provider.regionStr | String | The AWS region containing the function, for example us-east-1. | Yes |
provider.credentialId | String | The ID of an existing Username/Password credential: username holds the AWS access key ID; password holds the AWS secret access key. | Yes |
provider.payloadPathExpressionStr | String | A path selecting data from the input record to send as the JSON payload, for example $.order. This is a path expression, not a {{...}} text template. | Yes |
Supply all fields explicitly when writing JSON. provider.credentialId references a credential, not a connection profile; keep the access keys in that credential rather than in the node configuration. This provider uses basic access-key credentials and does not have a session-token field.
For a node with commandName: "enrichment", the following is its config object. Replace YOUR_AWS_CREDENTIAL_ID with the ID of your existing credential, and set the function name and region to match your function:
{
"outputFieldName": "lambda_result",
"provider": {
"type": "aws_lambda",
"functionName": "enrich-order",
"regionStr": "us-east-1",
"credentialId": "YOUR_AWS_CREDENTIAL_ID",
"payloadPathExpressionStr": "$.order"
}
}
Given this input record:
{
"event_id": "evt-123",
"order": {
"order_id": 123
}
}
The path $.order selects only the order object, so the function receives this JSON payload:
{
"order_id": 123
}
If the function returns:
{
"customer_tier": "gold",
"priority": true
}
The node produces:
{
"event_id": "evt-123",
"order": {
"order_id": 123
},
"lambda_result": {
"customer_tier": "gold",
"priority": true
}
}
The function must return valid JSON. In this example, the response becomes an object on the record, not a JSON-encoded string. If the function returns JSON null, the original record passes through unchanged; the output field is not added or overwritten. Invocation failures, function errors, and responses that cannot be parsed as JSON fail the affected record.
HTTP Client

Calls a REST API endpoint for each record and stores the response body on the record as a string.
| Field | Description | Required | Default |
|---|---|---|---|
| URL | The endpoint to call. Use {{$.field}} placeholders to build a dynamic URL, e.g. https://api.example.com/users/{{$.user_id}}. | Yes | — |
| Method | The HTTP method: GET, POST, PUT, or DELETE. | Yes | GET |
| Type, under Authorization (optional) | How to authenticate the request: None, Basic Auth (select Username/password credential), or Bearer Token (select API key credential). | No | None |
| Key and Value, under Headers (optional) | Additional request headers as key/value pairs. Values may contain {{$.field}} placeholders. | No | — |
| HTTP Body (optional) | The request payload for POST, PUT, and DELETE requests. May contain {{$.field}} placeholders. | No | — |
The response is captured as a raw string, regardless of the API's content type. To work with a JSON response as structured data, cast it in a following SQL node — for example SELECT enrichment::json FROM records.
Fetch HTML

Downloads the content of a web page for each record and stores it on the record as a string.
| Field | Description | Required | Default |
|---|---|---|---|
| URL | The page to fetch. Use {{$.field}} placeholders to build a dynamic URL, e.g. https://example.com/{{$.path}}. | Yes | — |
| Extract plain text from HTML | When checked, HTML markup is stripped and only the visible text is returned. When unchecked, the full HTML document is returned. | No | Unchecked |
Constraints and guidelines:
- Only HTTPS URLs are allowed.
- The response must have an HTML content type, and the downloaded body is capped (large pages are rejected).
- The node does not provide proxy services or IP rotation. Make sure your use complies with each site's
robots.txtand terms of service, and that you have permission to access the content.
Error Handling
If a provider call throws an error (a failed query, an unreachable endpoint, an invalid URL), the record is marked as failed and the error is surfaced — it is not silently dropped.
When a lookup simply returns nothing:
- In-Memory Lookup follows the On miss setting (pass through,
nulloutput, or error). - BigQuery and Database attach an empty result set when the query matches no rows.