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

# Add activities

> How suppliers add project activities in Certify by CSV upload, including time columns, measurements and links to sites

Activities record what happened in your project and when, for example a measurement taken in a field plot, a spreading event or a transport leg. This guide covers how to add them in Certify. For what each activity type expects, see the [Activities reference](/user-guides/certify/project-assets/activities-reference).

<Info>
  Activities are currently supported for **Reforestation projects** using the [Reforestation protocol](https://registry.isometric.com/protocol/reforestation/1.2).

  The **Activities** section only appears in a project's navigation if the project's protocol defines activity types.
</Info>

## The activities page

Open the [Certify dashboard](https://registry.isometric.com/account/certify), select your project, and click **Activities** in the left-hand navigation.

The page shows one tab per activity type configured for your project. Each tab shows how many activities of that type exist, a description of what the type represents, and a table of the activities with their names, reference IDs, times, metadata, measurement counts and upload dates. Clicking a row opens the activity, where you can see its metadata and measurements recorded against it, with their units. If an activity type has child activity types, the activity's page also has a tab for each child type.

Adding activities requires project Editor access.

## Adding activities

Activities are added by CSV, one file at a time.

<Steps>
  <Step title="Download the template">
    Open the tab for the activity type and click **+ Add**. The dialog offers a **template** with the exact columns for that activity type in your project, and an **example** with the same columns filled in.

    <Warning>
      Always start from your project's template. Columns are derived from your protocol version, so a file prepared for a different project or protocol version may not match.
    </Warning>
  </Step>

  <Step title="Populate CSV">
    Fill one row per activity, following the column groups described below. Leave optional measurement columns blank where you have no value; do not delete the columns.
  </Step>

  <Step title="Upload data">
    Select your file, and submit. Files are processed in the background, so you can leave the page — Certify notifies you when processing finishes and the table refreshes.

    <Tip>
      The upload supports creation of up to 5,000 activities. Larger datasets should be split across multiple files and uploaded sequentially.
    </Tip>
  </Step>

  <Step title="Check the result">
    If a row fails validation, the error will log the row, the column and the specific problem, so you can correct the file and re-upload. Rows are validated per cell, so one upload reports every problem it finds rather than stopping at the first.
  </Step>
</Steps>

## CSV columns

Columns always appear in the same order.

<AccordionGroup>
  <Accordion title="Identity" icon="fingerprint" defaultOpen>
    `name` and `reference_id`, both required. The reference ID must be unique within your organisation and is how you refer to the activity later. See [Supplier Reference ID](/user-guides/certify/supplier-reference-id).
  </Accordion>

  <Accordion title="Time" icon="calendar">
    The columns depend on the activity type's time granularity:

    | Time            | Columns                  | Format       |
    | --------------- | ------------------------ | ------------ |
    | Date            | `date`                   | `yyyy-mm-dd` |
    | Timestamp       | `time`                   | ISO 8601     |
    | Date range      | `start_date`, `end_date` | `yyyy-mm-dd` |
    | Timestamp range | `start_time`, `end_time` | ISO 8601     |
    | None            | *no time columns*        |              |
  </Accordion>

  <Accordion title="Metadata" icon="tags">
    One column per metadata field the protocol defines for the type, named with the field's key. Fields with a fixed set of allowed values must use one of those values exactly — the [Activities reference](/user-guides/certify/project-assets/activities-reference) lists them.
  </Accordion>

  <Accordion title="Links" icon="link">
    One column per related asset, holding that asset's **reference ID**. Columns are named after the related type, for example `field_plot_id` for the site an activity happens at. Where an activity relates to the same type more than once, the relationship is prefixed to tell the columns apart, as in `child_of_activity_id`.

    Related assets must already exist in the project before the activities that reference them are uploaded.
  </Accordion>

  <Accordion title="Measurements" icon="ruler">
    One column per measurement, headed with its display name and unit, such as `Diameter at breast height (cm)`. Values must be plain numbers in the unit given in the header. Required measurements must have a value in every row; optional ones can be left blank.
  </Accordion>
</AccordionGroup>

## Example: Reforestation field plot measurement

Tree measurements are used to quantify above-ground biomass in each field plot, which in turn quantifies the carbon sequestered in the project area. Each measurement is one tree, on one date, in one field plot.

<Steps>
  <Step title="Add the field plots first">
    Each measurement is linked to a field plot by reference ID, so the field plots must already exist. See [Add sites](/user-guides/certify/project-assets/add-sites).
  </Step>

  <Step title="Download the template">
    Under **Activities**, open the **Field plot measurements** tab and click **Add**, then download the template. Its columns are:

    ```
    name,reference_id,date,tree_type,field_plot_id,Diameter at breast height (cm),Elevation (m),Height (m),Latitude (degree),Longitude (degree)
    ```
  </Step>

  <Step title="Populate one row per tree">
    ```
    name,reference_id,date,tree_type,field_plot_id,Diameter at breast height (cm),Elevation (m),Height (m),Latitude (degree),Longitude (degree)
    Tree 1,plot-001-tree-001,2026-01-01,GENUS_ABAREMA,field-plot-001,12.5,3.75,108.2,0.45,27.9
    ```

    * `date` is the date the tree was measured.
    * `tree_type` must be one of the supported genus or species keys — see the [Activities reference](/user-guides/certify/project-assets/activities-reference).
    * `field_plot_id` is the field plot's reference ID, as you uploaded it in the field plot GeoJSON.
    * Diameter at breast height is required. Height, latitude, longitude and elevation are optional; leave them blank if not measured.

    <Tip>
      Use a consistent naming scheme for reference IDs so measurements stay traceable, for example `plot-code_tree-number` or `plot-code_tree-number_survey`.
    </Tip>
  </Step>

  <Step title="Upload and verify">
    Click **Add**, select the file, and submit. When processing completes, the table lists the new measurements. Click a row to see its metadata and measurement values with units, and open its field plot to see the measurements grouped under the plot.
  </Step>
</Steps>

## Addressing errors in uploaded data

Rows that fail validation are not created, so correcting the file and re-uploading is enough. If activities were created with the wrong values, contact your Registry Operations Manager to have them removed before you re-upload.
