---
title: Add Multiple Tags
slug: manufacturing-connect-edge/add-multiple-tags
docTags: 
createdAt: 2026-10-01T18:45:18.532Z
---

You can add tags to connected devices by navigating to **DeviceHub&#x20;**> **Tags**. To learn more about registers for specific devices, see the [Industrial Systems Connection Guide](docId\:yQ2ITUsJpvlgkS50KRQ1R).&#x20;

# Before You Begin

Before creating tags, make sure you have connected a device. Refer to [Connect a Device](docId\:nm1lQfefyA-DSIfFitIty).

# Important

Refer to the following information on Free Tags and OPC UA Drivers:

- Certain device drivers do not have a list of register names in the *Add Tag* form. These are referred to as Free Tags.
- You must enter case-sensitive register names exactly how they are defined in the device.
- Devices do not display a *Connected&#x20;*&#x73;tatus until a tag with a correct register name is created. See [Device Connectivity Issues](docId\:HnCDmh8Drv_uNXi9vyVUp) for more information.&#x20;
- For OPC UA, map the OPC server tags to the client. Enter the Register Name using this format where the semicolon is required: `ns=1;s=tagname`  . For example: `ns=2;s=Channel1.Device1.Tag1`.

# Add Multiple Tags

You can add multiple tags at once by downloading a CSV template file, filling out the file with tag details, and uploading the CSV file.

:::hint{type="warning"}
**Important**: When saving the CSV file, you must ensure that commas are used as column delimiters and not semicolons. If semicolons are used as column delimiters, you won't be able to upload the CSV file successfully. See [Tag Upload through CSV Issues](docId:-PBNtUztuWlCndv_6O3WR) to learn more.&#x20;
:::

## Step 1: Download a Sample CSV Template

You will need to download a template CSV file that has common device tag fields. You may need to update the file with additional fields based on the device tags you're adding.&#x20;

**To download a sample CSV template:**

1. Select the appropriate device.&#x20;

::Image[]{src="https://api.archbee.com/api/optimize/SSUUxKZUk9bFTEPNn_6Zo/26Brt71thgWHkBBcR9Ke3_tagsselectdevicemce.png" size="80" width="1477" height="688" position="flex-start" caption="Select Device" darkWidth="1477" darkHeight="688" showCaption="true" indent="2"}

2. Click the **Help&#x20;**&#x69;con and select **Sample CSV Template**.&#x20;

::Image[]{src="https://api.archbee.com/api/optimize/SSUUxKZUk9bFTEPNn_6Zo/s9a5nYSFjpUt-5S0jlQFn_tagssamplecsvmce.png" size="80" width="1477" height="688" position="flex-start" caption="Sample CSV Template option" darkWidth="1477" darkHeight="688" showCaption="true" indent="2"}

## Step 2: Populate the CSV Template File

You can now populate the CSV template with the tags that will be added. A row/record for each tag must be populated with attribute values, as described below.&#x20;

- Refer to the [Industrial Systems Connection Guide](docId\:yQ2ITUsJpvlgkS50KRQ1R) and review the *Tag Parameters* section for your device. If tags for the device have additional fields that are not included in the template file, add them as required.&#x20;
- The order of the attribute columns in the template file may be in any order.&#x20;

Refer to the following sections for information on populating the CSV template file.&#x20;

### Example of a Tag CSV File

::File{src="https://api.archbee.com/api/presign/SSUUxKZUk9bFTEPNn_6Zo/wy-1Ko1vYtDxA4nDSoIiV_tag-sample.csv" label="Tag_sample.csv"}

| **deviceId**                         | **deviceName** | **driverName**                   | **name**         | **tagName** | **description**   | **valueType** | **registerID** | **publishCov** | **tagFormula**      | **metaData**                       | **pollingInterval** |
| ------------------------------------ | -------------- | -------------------------------- | ---------------- | ----------- | ----------------- | ------------- | -------------- | -------------- | ------------------- | ---------------------------------- | ------------------- |
| A581B3E2-12CC-4A69-92C0-2C09DAFC5148 | Test\_Device   | AB CompactLogix Ethernet FreeTag | TestRegisterName | TestTagName | SampleDescription | bool          |                | TRUE           | value+timestamp+100 | \{"MetaDataKey1":"MetaDataValue1"} | 1                   |

### Tag Attribute Rules

- The `deviceName` is required to find the corresponding device. The `deviceId` can be omitted. If the `deviceId` is not included, a `device name not found error` displays, but the tags will still be successfully added.&#x20;
- Attribute values are required unless noted as optional.
  - If an optional value is null, it is ignored. This allows for the loading of register definitions for multiple device types from a single file.
  - If the value is null and the device driver defines it as mandatory, the tag is not imported.
  - If an optional value is present in the CSV file, but it is not supported by the device driver, it is treated as an error and the tag is not imported.
- Attribute columns in the CSV can be in any order.

| **Attribute Name** | **Data Type** | **Description**                                                                                                                                        | **Required** | **Notes**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| ------------------ | ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| deviceId           | string        | ID of the device. You can get this value from the device tile in **DeviceHub&#x20;**> **Devices**.                                                     | No           | Get this value from the **Copy&#xA0;**&#x69;con next to the device ID in the device tile in **DeviceHub&#x20;**> **Devices**.<br /><br />If a device identified by the `deviceId` is not found, `deviceName` is used.                                                                                                                                                                                                                                                                                                                                                                                    |
| deviceName         | string        | The name you configure for the device.                                                                                                                 | Yes          |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| driverName         | string        | Driver name is for validating optional attributes against `registration.json`. This type should directly correspond to the name of the driver package. | No           | Get this value from the **Copy&#xA0;**&#x69;con next to the driver name in the device tile in **DeviceHub&#x20;**> **Devices**.                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| name               | string        | PLC register name or full PLC register address.                                                                                                        | Yes          | Depends on `valueType`<br />This name is case sensitive.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| tagName            | string        | The name you configure for the tag.                                                                                                                    | Yes          |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| description        | string        | The description you configure for the tag.                                                                                                             | No           |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| valueType          | string        | Type of the register value.                                                                                                                            | Yes          | The list of available selection depends on the **Register Table&#x20;**&#x6F;f the device.<br />Examples: bit, word                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
| registerID         | string        | A unique register Id generated for this tag                                                                                                            | No           | This should be left blank as this value is generated when the tag is created.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| publishCoV         | boolean       | A flag that indicates whether the **Only Publish on Change of Value** setting is enabled.                                                              | No           | If left bank, the value `FALSE` is set by default.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| tagFormula         | string        | A formula that will transform the tag payload value to a new final value.                                                                              | No           | This column will be empty if there is no formula entered.<br />Available parameters for the formula are as follows:<br />- `value` - current tag value
- `timestamp` - current tag unit time in milliseconds&#xD;<br />Available math functions&#xD;<br />- `sin`&#xD;
- `cos`&#xD;
- `sqrt`&#xD;
- `tan`&#xD;
- `power`&#xD;
- `log`&#xD;
- `exp`&#xD;<br />Example formula:&#xD;<br />`sin(value) + 1`<br />For additional functions on tag values such as rounding and data conversions, you can use [Analytics](docId\:dXCE9032oQIlIGIMolvlm) or the [Flows Manager](docId\:q4JyT-_6f9wEAqu53lw3b).  |
| metaData           | string        | A JSON-formatted string containing one or more Metadata key-value pairs                                                                                | No           |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| pollingInterval    | float         | Polling interval in seconds                                                                                                                            | No           | How often the tag will poll the driver for a value. 0 means auto polling disabled. 1 means poll every 1 second. If left blank, a value of 1 is set.                                                                                                                                                                                                                                                                                                                                                                                                                                                      |

### CSV Formatting and Escaping Rules

Because CSV format is not standardized, several different methods could be used for escaping special characters. And, depending on locality, a different value separator may be used. For example, in European countries, a semi-colon is widely used as a separator. The Manufacturing Connect Edge CSV specification adheres to the rules used by Microsoft Excel, as listed below:

- Field separators can be comma (`,`), semicolon (`;`), or tab (`\t`).
- Fields can have white spaces around them. This space is removed during processing.
- Fields can be escaped with double quotes (`"`) or single quotes (`'`). Leading or trailing white spaces inside the quotes are preserved.
- Any separator characters within a quoted field is treated as part of the field value.
- Any quotation character in a field value must be escaped with a backslash (`\`) character.
- Fields are parsed based on their data type: **string** values are read "as is" and **numeric&#xA0;**&#x76;alues are parsed with a numeric parser.
- Empty fields are treated as null values.

## Step 3: Upload Populated CSV File of Tags

Once the CSV template file is populated, you can upload it to add all tags that were added to the file.&#x20;

**To upload a populated CSV file:**

1. Navigate to the *Tags&#x20;*&#x70;ane, and then select the appropriate device.&#x20;

::Image[]{src="https://api.archbee.com/api/optimize/SSUUxKZUk9bFTEPNn_6Zo/eokGv3CV1KHd7tnZR1_Ls_tagsselectdevicemce.png" size="80" width="1477" height="688" position="flex-start" caption="Select Device" darkWidth="1477" darkHeight="688" showCaption="true" indent="2"}

2. Click the **Add Tag** icon and select **Upload CSV**.&#x20;

::Image[]{src="https://api.archbee.com/api/optimize/SSUUxKZUk9bFTEPNn_6Zo/jD9qX441dyIOgAhpFeL-l_tagsuploadcsvmce.png" size="80" width="1477" height="688" position="flex-start" darkWidth="1477" darkHeight="688" showCaption="false" indent="2"}

3. Click **Select CSV**.
4. Select the file to upload and click **Open**.&#x20;
5. From th&#x65;*&#x20;Upload Tags* dialog box, click **Upload**. Upon a successful upload, the tags appear in the *Tags&#x20;*&#x70;ane.
   If the details in the CSV file do not match the expected configuration, error messages indicate the issues.

