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

# Matching Rules

> Learn how to configure matching rules for reconciliation.

export const CtaCallout = props => {
  const {title, buttonLabel, href, trackingEvent, buttonTarget, rel = "noopener noreferrer", children} = props;
  const handleCtaClick = () => {
    if (typeof window === "undefined" || !trackingEvent) {
      return;
    }
    try {
      window.dispatchEvent(new CustomEvent("blnk:docs-cta", {
        detail: {
          name: trackingEvent,
          href
        }
      }));
    } catch {}
    try {
      window.posthog?.capture?.(trackingEvent, {
        href
      });
    } catch {}
    const gaPayload = {
      cta_href: href
    };
    try {
      window.gtag?.("event", trackingEvent, gaPayload);
    } catch {}
    try {
      window.dataLayer = window.dataLayer || [];
      window.dataLayer.push({
        event: trackingEvent,
        ...gaPayload
      });
    } catch {}
  };
  const isExternal = typeof href === "string" && (/^https?:\/\//i).test(href);
  const target = buttonTarget ?? (isExternal ? "_blank" : undefined);
  const linkRel = isExternal ? rel : undefined;
  return <section className="cta-callout not-prose relative my-8 w-full min-w-0 overflow-hidden rounded-xl border border-zinc-200 p-5 dark:border-white/10">
      <div className="cta-callout-noise" aria-hidden="true" />
      <div className="cta-callout-layout">
        {title ? <div className="cta-callout-title-row">
            <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="14" height="14" className="cta-callout-icon shrink-0 text-zinc-800 dark:text-zinc-200" aria-hidden="true">
              <g fill="none" fillRule="nonzero">
                <path d="M28 0v28H0V0h28ZM14.691833333333335 27.134333333333334l-0.012833333333333334 0.0023333333333333335 -0.08283333333333333 0.04083333333333334 -0.023333333333333334 0.004666666666666667 -0.016333333333333335 -0.004666666666666667 -0.08283333333333333 -0.04083333333333334c-0.011666666666666667 -0.004666666666666667 -0.022166666666666668 -0.0011666666666666668 -0.028000000000000004 0.005833333333333334l-0.004666666666666667 0.011666666666666667 -0.019833333333333335 0.49933333333333335 0.005833333333333334 0.023333333333333334 0.011666666666666667 0.015166666666666667 0.12133333333333333 0.08633333333333333 0.0175 0.004666666666666667 0.014000000000000002 -0.004666666666666667 0.12133333333333333 -0.08633333333333333 0.014000000000000002 -0.018666666666666668 0.004666666666666667 -0.019833333333333335 -0.019833333333333335 -0.4981666666666667c-0.0023333333333333335 -0.011666666666666667 -0.0105 -0.019833333333333335 -0.019833333333333335 -0.021Zm0.3091666666666667 -0.13183333333333336 -0.015166666666666667 0.0023333333333333335 -0.21583333333333335 0.1085 -0.011666666666666667 0.011666666666666667 -0.0035000000000000005 0.012833333333333334 0.021 0.5016666666666667 0.005833333333333334 0.014000000000000002 0.009333333333333334 0.008166666666666668 0.23450000000000004 0.1085c0.014000000000000002 0.004666666666666667 0.026833333333333334 0 0.03383333333333334 -0.009333333333333334l0.004666666666666667 -0.016333333333333335 -0.03966666666666667 -0.7163333333333334c-0.0035000000000000005 -0.014000000000000002 -0.011666666666666667 -0.023333333333333334 -0.023333333333333334 -0.025666666666666667Zm-0.8341666666666667 0.0023333333333333335a0.026833333333333334 0.026833333333334334 0 0 0 -0.0315 0.007000000000000001l-0.007000000000000001 0.016333333333333335 -0.03966666666666667 0.7163333333333334c0 0.014000000000000002 0.008166666666666668 0.023333333333333334 0.019833333333333335 0.028000000000000004l0.0175 -0.0023333333333333335 0.23450000000000004 -0.1085 0.011666666666666667 -0.009333333333333334 0.004666666666666667 -0.012833333333333334 0.019833333333333335 -0.5016666666666667 -0.0035000000000000005 -0.014000000000000002 -0.011666666666666667 -0.011666666666666667 -0.21466666666666667 -0.10733333333333334Z" strokeWidth="1.1667" />
                <path fill="currentColor" d="M14 2.916666666666667A1.75 1.75 0 0 1 15.750000000000002 4.666666666666667v6.302333333333334L21.207666666666668 7.816666666666667a1.75 1.75 0 0 1 1.75 3.031L17.5 14l5.457666666666667 3.151166666666667a1.75 1.75 0 0 1 -1.75 3.031l-5.457666666666667 -3.1500000000000004V23.333333333333336a1.75 1.75 0 0 1 -3.5 0v-6.302333333333334L6.792333333333334 20.183333333333337a1.75 1.75 0 1 1 -1.75 -3.031L10.5 14 5.042333333333334 10.848833333333333a1.75 1.75 0 0 1 1.75 -3.031l5.457666666666667 3.1500000000000004V4.666666666666667A1.75 1.75 0 0 1 14 2.916666666666667Z" strokeWidth="1.1667" />
              </g>
            </svg>
            <p className="cta-callout-title min-w-0 font-semibold text-zinc-800 dark:text-zinc-200">
              {title}
            </p>
          </div> : null}
        <div className={`cta-callout-body text-sm leading-normal text-zinc-800 dark:text-zinc-200${title ? " cta-callout-body--indented" : ""}`}>
          {children}
        </div>
        <a href={href} target={target} rel={linkRel} onClick={handleCtaClick} data-docs-cta={trackingEvent || undefined} className="cta-callout-button inline-flex items-center justify-center gap-1 rounded-full bg-white px-3 py-1.5 text-sm font-semibold transition hover:bg-zinc-100 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-white/50 dark:bg-white dark:hover:bg-zinc-200">
          {buttonLabel}
          <span className="cta-callout-button-arrow" aria-hidden="true">
            →
          </span>
        </a>
      </div>
    </section>;
};

Matching rules tell Blnk how to match the two sets of records. They define how fields like amount, date, description, reference, etc. are compared to each other while accounting for slight variations (called drifts),

In this guide, you'll learn everything about matching rules and how to configure them for your reconciliation runs.

***

## Create a matching rule

To create a new matching rule:

<img src="https://mintcdn.com/blnk/V1zKD8N18ifO090g/cloud/img/reconciliation/set-matching-rules.png?fit=max&auto=format&n=V1zKD8N18ifO090g&q=85&s=ed3beadfb8d07e5acda4e2133d39964c" alt="Create matching rule" className="rounded-lg" width="1366" height="768" data-path="cloud/img/reconciliation/set-matching-rules.png" />

1. Go to the `Reconciliations` page from your sidenav.
2. Click on `Matching rules` from the top menu.
3. Click on `Create matching rule` from the top right corner.
4. Enter the required details:
   * **Name:** The name of the matching rule.
   * **Description:** A short description of the matching rule.
   * **Criteria:** Fields to compare and match records.
5. Once done, click `Create matching rule` to finish.

***

## Setting up criteria

Matching rules are made of one or more criteria. With Blnk, you can define a rule with up to five criteria.. Each criterion is a field Blnk will compare across your external data and your ledger.

When you set more than one criterion, Blnk will only match records that meet all the criteria.

| Criteria    | Operators                         | What it checks                                  | Internal field |
| :---------- | :-------------------------------- | :---------------------------------------------- | :------------- |
| amount      | equals, greater\_than, less\_than | Compares transaction amounts                    | `amount`       |
| currency    | equals                            | Ensures both transactions use the same currency | `currency`     |
| date        | equals, after, before             | Compares transaction dates                      | `created_at`   |
| reference   | equals, contains                  | Checks for exact or partial reference matches   | `reference`    |
| description | equals, contains                  | Matches transactions by description             | `description`  |

### Operators

Each attribute uses operators that define how strict the comparison should be.

| Operator      | Description                                                  |
| :------------ | :----------------------------------------------------------- |
| equals        | Both records must match exactly                              |
| contains      | The external value must appear as part of the internal value |
| greater\_than | External amount is higher than the internal amount           |
| less\_than    | External amount is lower than the internal amount            |
| after         | External date is later than the internal date                |
| before        | External date is earlier than the internal date              |

### Allowable drifts

Whe comparing values like dates and amounts, Blnk allows you to set a tolerance for slight variations. This is called `allowable drift`, best used with the `equals` operator.

<img src="https://mintcdn.com/blnk/V1zKD8N18ifO090g/cloud/img/reconciliation/allowable-drifts.png?fit=max&auto=format&n=V1zKD8N18ifO090g&q=85&s=22dc9522a2bee9c79a42397d7913b62a" alt="Set allowable drift" className="rounded-lg" width="1366" height="768" data-path="cloud/img/reconciliation/allowable-drifts.png" />

1. `Amount drift:` Lets you allow small differences between the amounts in your ledger and the external file. The value you set is a percentage written as a decimal. For example, 0.01 means a 1 percent tolerance.
   <Note>If the internal amount is \$100 and you set a 1% drift, any external amount between \$99 and \$101 will be considered a match.</Note>

2. `Date drift:` Lets you allow time differences between the internal timestamp and the external one. The value you set is in seconds. For example, `3600` means a one hour tolerance.
   <Note>If the internal record is 2:00 PM and you set a 1 hour drift, any external timestamp from 1:00 PM to 3:00 PM will be treated as a match.</Note>

### When to use drifts

1. **Use amount drift when:**
   * Your external data includes processing fees or minor exchange rate variations.
   * Your system rounds transactions differently from external sources.

2. **Use date drift when:**
   * Your transactions involve cross-time-zone processing.
   * Payment settlements take hours or days to finalize.

***

## Best practices

Blnk compares each internal record against your external data based on the matching rules you set. If your rules are too broad, a single external record can match multiple internal ones, which creates confusing results.

To avoid this, use clear and specific criteria when creating your matching rules.

* Use one or more distinct attributes in your matching rules, e.g. date and reference.
* For multi-currency systems, specify the currency in your matching rules to prevent mismatches with other currencies.
* Test your rules with a small sample of your data to ensure they work as expected.
* Depending on the source of your external data, you may need to set different rules for different sources.

***

## Need help?

We are very happy to help you make the most of Blnk, regardless of whether it is your first time or you are switching from another tool.

To ask questions or discuss issues, please [contact us](mailto:support@blnkfinance.com) or [join our Discord community](https://discord.gg/7WNv94zPpx).

<CtaCallout title="Need help with your product?" href="https://blnkfinance.com/contact/us?utm_source=blnk_docs&utm_medium=documentation&utm_campaign=home%2Finstall" buttonLabel="Speak with us" trackingEvent="clicked_pro_support">
  Get dedicated support for architecture reviews, integration planning, ledger workflows, and production deployment.
</CtaCallout>
