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

# Sync Tags with Dimension Values

export const IntegrationDesignTagsSyncTagsDiagram = () => {
  const [isDark, setIsDark] = useState(false);
  useEffect(() => {
    const check = () => setIsDark(document.documentElement.classList.contains("dark"));
    check();
    const observer = new MutationObserver(check);
    observer.observe(document.documentElement, {
      attributes: true,
      attributeFilter: ["class"]
    });
    return () => observer.disconnect();
  }, []);
  const nodeFill = isDark ? "#212222" : "#EEF4F4";
  const nodeStroke = isDark ? "#848989" : "#212222";
  const nodeTextStyle = isDark ? ",color:#EEF4F4" : ",color:#131414";
  const linkStyle = isDark ? "" : "linkStyle default stroke:#848989,stroke-width:1px;";
  const themeVariables = {
    fontSize: "12px",
    ...isDark ? {} : {
      edgeLabelBackground: "#FAFCFC"
    }
  };
  const diagram = `
%%{init: {"themeVariables": ${JSON.stringify(themeVariables)}}}%%
flowchart TD
    A[For each Tag Group-Dimension pair] --> B[1. Pull active Dimension Values from AS]
    B --> C[2. Pull active and archived Tags from Pleo for this Tag Group]
    C --> D[3. Match each Dimension Value to Tags by code]
    D -->|Found, single match, Pleo active| E[Preserve Tag, update name if different]
    D -->|Found, single match, Pleo archived| F[Unarchive Tag, update name if different]
    D -->|Not found| G[Create new Tag]
    D -->|Duplicate codes found| H[Retain one Tag, archive duplicates]
    E --> I[4. Archive remaining Tags with no matching Dimension Value]
    F --> I
    G --> I
    H --> I

    style A white-space:normal,fill:${nodeFill},stroke:${nodeStroke}${nodeTextStyle}
    style B white-space:normal,fill:${nodeFill},stroke:${nodeStroke}${nodeTextStyle}
    style C white-space:normal,fill:${nodeFill},stroke:${nodeStroke}${nodeTextStyle}
    style D white-space:normal,fill:${nodeFill},stroke:${nodeStroke}${nodeTextStyle}
    style E white-space:normal,fill:${nodeFill},stroke:${nodeStroke}${nodeTextStyle}
    style F white-space:normal,fill:${nodeFill},stroke:${nodeStroke}${nodeTextStyle}
    style G white-space:normal,fill:${nodeFill},stroke:${nodeStroke}${nodeTextStyle}
    style H white-space:normal,fill:${nodeFill},stroke:${nodeStroke}${nodeTextStyle}
    style I white-space:normal,fill:${nodeFill},stroke:${nodeStroke}${nodeTextStyle}
${linkStyle}
`;
  return <Mermaid chart={diagram} />;
};

export const NoteCallout = ({title, children}) => <div className="callout-box callout-note">
    <div className="callout-row">
      <span className="callout-icon">
        <svg width="22" height="22" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 256 256" fill="currentColor"><path d="M208,104a79.86,79.86,0,0,1-30.59,62.92A24.29,24.29,0,0,0,168,186v6a8,8,0,0,1-8,8H96a8,8,0,0,1-8-8v-6a24.11,24.11,0,0,0-9.3-19A79.87,79.87,0,0,1,48,104.45C47.76,61.09,82.72,25,126.07,24A80,80,0,0,1,208,104Z" opacity="0.2" /><path d="M176,232a8,8,0,0,1-8,8H88a8,8,0,0,1,0-16h80A8,8,0,0,1,176,232Zm40-128a87.55,87.55,0,0,1-33.64,69.21A16.24,16.24,0,0,0,176,186v6a16,16,0,0,1-16,16H96a16,16,0,0,1-16-16v-6a16,16,0,0,0-6.23-12.66A87.59,87.59,0,0,1,40,104.49C39.74,56.83,78.26,17.14,125.88,16A88,88,0,0,1,216,104Zm-16,0a72,72,0,0,0-73.74-72c-39,.92-70.47,33.39-70.26,72.39a71.65,71.65,0,0,0,27.64,56.3A32,32,0,0,1,96,186v6h64v-6a32.15,32.15,0,0,1,12.47-25.35A71.65,71.65,0,0,0,200,104Zm-16.11-9.34a57.6,57.6,0,0,0-46.56-46.55,8,8,0,0,0-2.66,15.78c16.57,2.79,30.63,16.85,33.44,33.45A8,8,0,0,0,176,104a9,9,0,0,0,1.35-.11A8,8,0,0,0,183.89,94.66Z" /></svg>
      </span>
      <div>
        {title && <div className="callout-title">
            {title}
          </div>}
        <div className="callout-body">
          {children}
        </div>
      </div>
    </div>
  </div>;

export const RememberCallout = ({title, children}) => <div className="callout-box callout-remember">
    <div className="callout-row">
      <span className="callout-icon">
        <svg width="22" height="22" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 256 256" fill="currentColor"><path d="M229.66,98.34,172.39,155.8c11.46,22.93-1.72,45.86-10.11,57a8,8,0,0,1-12,.83L42.34,105.76A8,8,0,0,1,43,93.85c29.65-23.92,57.4-10,57.4-10l57.27-57.46a8,8,0,0,1,11.31,0L229.66,87A8,8,0,0,1,229.66,98.34Z" opacity="0.2" /><path d="M235.32,81.37,174.63,20.69a16,16,0,0,0-22.63,0L98.37,74.49c-10.66-3.34-35-7.37-60.4,13.14a16,16,0,0,0-1.29,23.78L85,159.71,42.34,202.34a8,8,0,0,0,11.32,11.32L96.29,171l48.29,48.29A16,16,0,0,0,155.9,224c.38,0,.75,0,1.13,0a15.93,15.93,0,0,0,11.64-6.33c19.64-26.1,17.75-47.32,13.19-60L235.33,104A16,16,0,0,0,235.32,81.37ZM224,92.69h0l-57.27,57.46a8,8,0,0,0-1.49,9.22c9.46,18.93-1.8,38.59-9.34,48.62L48,100.08c12.08-9.74,23.64-12.31,32.48-12.31A40.13,40.13,0,0,1,96.81,91a8,8,0,0,0,9.25-1.51L163.32,32,224,92.68Z" /></svg>
      </span>
      <div>
        {title && <div className="callout-title">
            {title}
          </div>}
        <div className="callout-body">
          {children}
        </div>
      </div>
    </div>
  </div>;

This page describes **[Step 3 of Tags Sync](/docs/current/integration-design/accounting-integrations/imports/tags/integration-design-tags-overview#sync-steps)**: synchronising Dimension Values from the Accounting System with Tags in Pleo, for each synced Dimension-Tag Group pair.

This step runs immediately after Tag Group synchronisation, for every active Tag Group-Dimension pair.

## Implementation

* [Tags Sync Workflow Guide](/docs/current/guides/accounting-integrations/imports/tags-sync-workflow-guide#3-sync-tags-with-dimension-values): workflow context and sequencing
* [How to Sync Tags with Dimension Values](/docs/current/how-tos/accounting-integrations/imports/tags/how-to-sync-tags-with-dimension-values): API usage and step-by-step instructions

For a conceptual overview of how AS Dimension Values map to Pleo Tags, see [Platform Capabilities: Tags Sync](/docs/current/platform/accounting-integrations/imports/tags/tags-sync-overview).

## Matching Rules

* Matching is performed using the **code** field on both ends.
* Matching is **case-insensitive**: a Dimension Value with code `ENG` matches a Tag with code `eng`.
* Name differences do not affect matching: only code is used for matching. Names are updated separately if they differ.

## Sync Process

<IntegrationDesignTagsSyncTagsDiagram />

### 1. Pull Dimension Values

For each synced Dimension-Tag Group pair, retrieve **active** (non-blocked, non-expired) Dimension Values from the AS.

### 2. Pull Tags from Pleo

Retrieve **active and archived** Tags for the corresponding Tag Group from Pleo.

### 3. Match Dimension Values to Tags

For every Dimension Value, match against Tags using the Dimension Value's **code** (case-insensitive).

#### Code found: Tag is active

The AS Dimension Value is active and the matching Pleo Tag is also active. **Preserve it**.

If the Tag's name differs from the Dimension Value name, **update the Tag's name** to match.

#### Code found: Tag is archived

The AS Dimension Value is active but the matching Pleo Tag is archived. **Unarchive it**.

If the Tag's name differs from the Dimension Value name, **update the Tag's name** to match.

#### Code not found

The AS Dimension Value is active but no matching Pleo Tag exists. **Create a new Tag** with the Dimension Value's code and name.

#### Duplicate codes found

Two or more Tags in Pleo share the same code.

Apply the following resolution logic:

1. Check whether any of the duplicates also match the Dimension Value **by name**.
2. If a name match exists: **retain that Tag**, archive all other duplicates.
3. If no name match exists, or multiple name matches exist: **retain one Tag** (chosen randomly), update its name to match the Dimension Value, and **archive all other duplicates**.

<NoteCallout title="Note">
  Duplicate Tags can arise from legacy integrations or manual edits. The sync resolves them without data loss by archiving rather than deleting.
</NoteCallout>

### 4. Archive unmatched Tags

Pleo Tags that are active but have no matching active AS Dimension Value must be **archived**.

This covers Tags corresponding to Dimension Values that have been deleted, blocked, expired, or deactivated in the AS.

<RememberCallout title="Remember">
  Tags are never permanently deleted. Archiving preserves historical tagging data and allows unarchiving if the Dimension Value is reinstated.
</RememberCallout>

***

## What Comes Next?

* [Data Mapping](/docs/current/integration-design/accounting-integrations/imports/tags/integration-design-tags-data-mapping)

***

## Related Reading

* [How to Sync Tags with Dimension Values](/docs/current/how-tos/accounting-integrations/imports/tags/how-to-sync-tags-with-dimension-values)
* [Tags Sync Workflow Guide](/docs/current/guides/accounting-integrations/imports/tags-sync-workflow-guide)
* [Platform Capabilities: Tags Sync](/docs/current/platform/accounting-integrations/imports/tags/tags-sync-overview)

***
