> For the complete documentation index, see [llms.txt](https://help.impact.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://help.impact.com/brand/what-would-you-like-to-learn-about/platform-features/promo-codes/bulk-upload-promo-codes.md).

# Bulk Upload Promo Codes

You can create multiple tracking promo codes at once from a CSV, XLS, or XLSX file. After you upload your file, impact.com validates each row so you can review and fix any errors before you create the promo codes.

Files can be up to 5 MB for CSV or 1 MB for XLS and XLSX. Validation is based on file size only, so there's no limit on the number of rows.

## Upload your promo codes

1. From the left navigation menu, select ![](https://4048883401-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FwMLlMoFBtKJa8ptd3zaw%2Fuploads%2Fgit-blob-230534471fef5f40808e921e41ee44e4a06ded03%2Fe6cb9548999afdc1ed3ce4942e4cb5b45b5cecbd323267aac2a7cd1915fccc09.svg?alt=media) **\[Engage]** → **Content** → [**Promo Codes**](https://app.impact.com/secure/advertiser/engage/ads/view-adv-promo-codes-flow.ihtml).
2. On the *Promo Codes* screen, select **Bulk Upload**.
3. Optionally, select **Download** to get a sample template file, or select **See format details** to view the required columns.
4. Select **Choose File**, then locate and select your file. You can also drag and drop the file onto the page.
5. Select **Continue**.
6. Review the *Data Preview* table. The *Validation* column shows *Approved* for rows that are ready, or an error message for rows that need changes.
   * Optionally, to sort the rows, select a column header or select **Sort Order**.
   * To view all errors for a row, select ![](https://4048883401-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FwMLlMoFBtKJa8ptd3zaw%2Fuploads%2FzdZvuTyltsDGVW39C6ZZ%2F%5BPlus%5D.svg?alt=media\&token=a2ba6db3-74b5-4ae1-b849-87501cf3a8ec) **\[Expand]** next to the promo code. The *Errors Preview* lists each column, its value, and the issue.
   * To fix errors, update your file, select **Cancel** next to the file name, and then upload the corrected file.
7. Select **Accept & Create Promo Codes**. The message next to the button shows the number of approved promo codes that impact.com creates. If no rows are approved, the button is disabled.

impact.com creates the approved promo codes and returns you to the *Promo Codes* screen. Only approved rows are created. If an error occurs while impact.com creates your promo codes, an error message with an error code appears. Contact support and include this code.

To cancel a bulk upload, select ![](https://4048883401-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FwMLlMoFBtKJa8ptd3zaw%2Fuploads%2FYaEYpaDDip5FxDbF8lnO%2Fclose.svg?alt=media\&token=da6580c0-a38f-4bf9-a34a-619921f19e9e) **\[Close]** in the top-right corner of the screen, and then select **Confirm**.

{% hint style="success" %}
**Note:** Promo codes with a future start date have a *Pending* status. The *Promo Codes* screen shows *Active Promo Codes* by default, so change the [*Code Schedule* filter](/brand/what-would-you-like-to-learn-about/platform-features/promo-codes/manage-your-promo-codes.md) to find them.
{% endhint %}

## Format your promo code file

Your file must use the column names below exactly as shown, including capitalization and periods, or the upload is rejected.

| Column                 | Type       | Required | Description                                                                                                                                                                                                                                                                                                              |
| ---------------------- | ---------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `Operation`            | String     | Yes      | The bulk upload operation. Allowed value: `CREATE`.                                                                                                                                                                                                                                                                      |
| `media.id`             | Integer    | Yes      | <p>The impact.com media ID that the promo code is assigned to. This can be a partner account ID or a media source ID.</p><p>Each tracking promo code can only be assigned to 1 partner or media source. If another partner promotes that code, impact.com flags the resulting conversion as invalid and reverses it.</p> |
| `code`                 | String     | Yes      | The unique promo code. It can't contain angle brackets (`<`, `>`) or double quotes.                                                                                                                                                                                                                                      |
| `creditRule`           | String     | Yes      | <p>The promo code credit rule. Allowed values:</p><p><code>ALWAYS</code> (Always Credit)</p><p><code>INVOLVED</code> (Credit If Involved)</p><p><code>WINNER</code> (Credit If Winner)</p>                                                                                                                               |
| `matchMode`            | String     | Yes      | <p>The promo code match mode. Allowed values:</p><p><code>LI</code> (Exact/Literal)</p><p><code>RE</code> (Regex/Regular Expression)</p>                                                                                                                                                                                 |
| `deal.id`              | Integer    | No       | The ID of the [deal](/brand/what-would-you-like-to-learn-about/platform-features/deals.md) to associate with the promo code. The deal must already exist in your program.                                                                                                                                                |
| `scheduling.startDate` | Date       | Yes      | When the promo code becomes available. Enter a local date and time without a timezone offset, in the format `YYYY-MM-DDTHH:mm:ss` (for example, `2026-10-01T00:00:00`).                                                                                                                                                  |
| `scheduling.endDate`   | Date       | Yes      | When the promo code expires. Use the same format as `scheduling.startDate` (for example, `2026-12-31T23:59:59`).                                                                                                                                                                                                         |
| `scheduling.timezone`  | String     | Yes      | The IANA (Internet Assigned Numbers Authority) timezone for the scheduled dates (for example, `America/New_York`).                                                                                                                                                                                                       |
| `emailAddresses`       | CSV string | No       | A comma-separated list of email addresses to notify about this promo code.                                                                                                                                                                                                                                               |
| `comments`             | String     | No       | Free-text comments for this row.                                                                                                                                                                                                                                                                                         |

Example: This row creates the promo code `10PEROFF` for 1 partner, available from October 1 to December 31, 2026, in New York time.

```csv
Operation,media.id,code,creditRule,matchMode,deal.id,scheduling.startDate,scheduling.endDate,scheduling.timezone,emailAddresses,comments
CREATE,1299679,10PEROFF,ALWAYS,LI,,2026-10-01T00:00:00,2026-12-31T23:59:59,America/New_York,carrie.oakey@acmecorporation.io,Holiday promo
```

<details>

<summary>Validation error reference</summary>

| Validation message                                              | How to fix it                                                                                      |
| --------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- |
| *Unrecognised value*                                            | The value isn't one of the allowed values, or a date uses the wrong format. Check the table above. |
| *Value cannot contain angle brackets (<, >) or double quotes.*  | Remove these characters from the promo code.                                                       |
| *The promocode already exists for this program.*                | Use a promo code that isn't already in your program.                                               |
| *Media Partner \[ID] is not joined to campaign \[ID]*           | Use the media ID of a partner or media source that's joined to your program.                       |
| *Deal not found*                                                | Use the ID of an existing deal, or leave `deal.id` blank.                                          |
| *Only CREATE is supported for promo code scheduled procedures.* | Set `Operation` to `CREATE`.                                                                       |

</details>


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://help.impact.com/brand/what-would-you-like-to-learn-about/platform-features/promo-codes/bulk-upload-promo-codes.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
