> ## Documentation Index
> Fetch the complete documentation index at: https://docs.bondata.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Bond Node

> Combine data across entities by creating relationships based on shared keys

The Bond node is a powerful tool for combining data across entities. It works similarly to a join operation in SQL, allowing you to relate two datasets based on a shared key.

## What is a Bond?

A Bond creates a relationship between two entities by matching fields that represent the same identifier.

It:

* Connects two entities (e.g., Subscriptions and Charge Stations)
* Matches them using a shared field (e.g., Charge Station ID)
* Produces a virtual, in-memory table combining both datasets

## Core Concept: Matched vs Unmatched

When a Bond runs, every record falls into one of two categories:

* **Matched** - records where a relationship was successfully found
* **Unmatched** - records where no corresponding match exists

This distinction is central to how the Bond behaves and what data is passed downstream.

## How It Works

In the UI:

1. **Select two entities:**
   * Source (left): e.g., Subscriptions
   * Destination (right): e.g., Charge Stations
2. **Define the relationship:**
   * `Subscriptions.Charge Station ID` ↔ `Charge Stations.Charge Station ID`
3. The Bond evaluates all records and splits them into:
   * Matched pairs
   * Unmatched records (from either side)

<Note>
  If you are not seeing the Bond you are after, you can create it by clicking **+ Create Custom Bond**.
</Note>

<Frame caption="Create Custom Bond button">
  <img src="https://mintcdn.com/bondata/DlMd45I1zc1MvbNc/images/guide/nodes/combine/bond-node-create-custom.png?fit=max&auto=format&n=DlMd45I1zc1MvbNc&q=85&s=a9d6482a4e9ca297b88ac6ab0e431975" width="207" height="68" data-path="images/guide/nodes/combine/bond-node-create-custom.png" />
</Frame>

<Frame caption="Bond node configuration - selecting entities and match fields">
  <img src="https://mintcdn.com/bondata/DlMd45I1zc1MvbNc/images/guide/nodes/combine/bond-node-config.png?fit=max&auto=format&n=DlMd45I1zc1MvbNc&q=85&s=3bf0d01aa7860da5ae3c1bd61d9af0be" width="562" height="438" data-path="images/guide/nodes/combine/bond-node-config.png" />
</Frame>

## Bond Outputs

The Bond node exposes multiple outputs:

* **Matched** → records that successfully joined
* **Unmatched** → records that did not find a match

<Frame caption="Bond node showing Matched and Unmatched outputs">
  <img src="https://mintcdn.com/bondata/DlMd45I1zc1MvbNc/images/guide/nodes/combine/bond-node-outputs.png?fit=max&auto=format&n=DlMd45I1zc1MvbNc&q=85&s=09a0560566e40b74e0c240b67932cee9" width="201" height="132" data-path="images/guide/nodes/combine/bond-node-outputs.png" />
</Frame>

This allows you to:

* Continue analysis on valid relationships
* Investigate missing or inconsistent data separately

## Advanced: Controlling Match Behavior

In the **Advanced** tab, you can define exactly how matched and unmatched records are handled.

<Frame caption="Bond node - advanced match behavior options">
  <img src="https://mintcdn.com/bondata/DlMd45I1zc1MvbNc/images/guide/nodes/combine/bond-node-advanced.png?fit=max&auto=format&n=DlMd45I1zc1MvbNc&q=85&s=079dc3540ea1b29843dd30bdcb50fa45" width="819" height="968" data-path="images/guide/nodes/combine/bond-node-advanced.png" />
</Frame>

### 1. Match & Track (Default)

* **Matched:** Source records with a bond
* **Unmatched:** Source records without a bond

Best for standard enrichment use cases and tracking which source records failed to match.

### 2. Keep All Source

Keeps all source records, regardless of match. Destination data is added when available.

Equivalent to a **Left Join** in SQL.

### 3. Keep All Destination

Keeps all destination records, regardless of match.

Equivalent to a **Right Join** in SQL.

### 4. Keep Everything

Keeps all records from both sides.

Equivalent to a **Full Outer Join** in SQL.

### 5. Only Unmatched Source

Returns source records without matches. Useful for finding missing relationships and data quality checks.

### 6. Only Unmatched Destination

Returns destination records without matches. Useful for identifying unused or orphaned entities.

### 7. Only Unmatched from Both

Focuses strictly on mismatches - records that failed to bond across both sides. Best for debugging joins and auditing data consistency.

### When to Use Each Mode

| Goal                       | Recommended Mode           |
| -------------------------- | -------------------------- |
| Standard enrichment        | Match & Track              |
| Keep all subscriptions     | Keep All Source            |
| Analyze all data           | Keep Everything            |
| Find missing links         | Only Unmatched Source      |
| Audit destination coverage | Only Unmatched Destination |

## Probability Matching (Optional)

The **Probability Matching** toggle allows the Bond to use probabilistic logic:

* Instead of exact matches, it can match records based on similarity using scoring thresholds
* Useful for fuzzy matching (e.g., names, partial IDs) and imperfect or inconsistent datasets
* If disabled, only exact matches are considered

<Frame caption="Probability matching - custom similarity thresholds for record matching">
  <img src="https://mintcdn.com/bondata/DlMd45I1zc1MvbNc/images/guide/nodes/combine/bond-node-probability.png?fit=max&auto=format&n=DlMd45I1zc1MvbNc&q=85&s=c0849d1b0de88c66228369f6884fcb71" width="794" height="184" data-path="images/guide/nodes/combine/bond-node-probability.png" />
</Frame>

## Example

### Scenario

You want to enrich subscriptions with charge station data.

### Configuration

* **Source:** Subscriptions
* **Destination:** Charge Stations
* **Match:** Charge Station ID

### Result

* **Matched output:** Subscriptions with valid charge station info
* **Unmatched output:** Subscriptions missing or referencing invalid stations

## Best Practices

* Use **Matched** output for primary workflows
* Use **Unmatched** output for debugging and QA
* Choose join behavior intentionally - don't default blindly
* Validate key fields (IDs should align in format and meaning)
* Use probability matching only when necessary

## Related Nodes

* **[Merge Node](/guide/nodes/combine/merge-node)** - joins two datasets side-by-side into a flattened table, rather than creating entity relationships
* **[Union Node](/guide/nodes/combine/union-node)** - stacks rows vertically instead of combining columns
