Managing a long list of incentive templates one at a time can be slow. Snugg Pro lets you export all of a program's published incentive templates to a CSV, make your edits there, and import them back in.
This guide walks you through both, plus the one rule that trips people up most often.
Before you start: incentive sources are not included
Importing incentives never creates incentive sources.
Your CSV file has an Incentive Source Name column, but that column is only used to look up a source that already exists in your program. It does not create one, and no other incentive source details (description, contact info, and so on) travel in the file.
So, before you import, make sure every incentive source named in your file already exists in the program, spelled exactly the same way. If Snugg Pro can't find a match, the entire import is rejected with a message like: Incentive Source 'Utility Rebate Program' was not found in this program.
If you need a new source, add it first with the Add incentive source button on the Incentives page, then run your import.
Where to find it
Go to Settings → Program → Incentives.
You'll see Export to CSV and an import button at the top of the Incentive Templates page. These are only available to program admins and Snugg admins.
Exporting incentives
Click Export to CSV.
Your file downloads as program_[your program id]_incentive_templates.csv.
A few things to know:
Only published incentives are exported. Unpublished drafts are not included.
Incentive Source Name is the only source information included, and it repeats on every row that uses that source. That's expected.
The exported file is ready to re-import. You can export, edit, and import the same file without reformatting anything.
The "Missing Incentive IDs" prompt
If any of your published incentives don't have an Incentive ID yet, you'll see this before the download starts:
Missing Incentive IDs Some incentive templates do not have an Incentive ID. Incentive IDs are required to re-import incentives and ensure existing records are updated correctly instead of creating duplicates.
You have two choices:
Button | What happens |
Export Without IDs | Downloads the file with those Incentive ID cells left blank. You'll need to fill them in yourself before the file can be imported. |
Generate IDs | Snugg Pro creates a unique ID for each one automatically (based on the incentive title), saves it to the incentive, and includes it in the download. |
Generate IDs is the easier path if you plan to re-import. Incentives that already have an ID keep the ID they have — nothing is overwritten.
Importing incentives
Click the import button on the Incentives page and choose your .csv file.
Snugg Pro checks the whole file before changing anything.
If everything passes, you'll see an Import complete message telling you how many incentives were imported (newly created) and how many were updated.
How Snugg Pro decides to add vs. update
Matching is done on the Incentive ID within its incentive source:
Match found → that incentive is updated with the values in your row.
No match → a new incentive is created.
This is why Incentive IDs matter so much. Change or clear an ID and you'll get a duplicate instead of an update. The same applies if you move a row to a different Incentive Source Name — that counts as a new incentive.
Imports are all-or-nothing
If any row fails any check, nothing is imported and no existing incentives are changed. You'll get a Fix these errors window listing every problem, with the row number and Incentive ID so you can find it fast:
The file was not imported. No incentives were changed. Please fix the following and try again: Row 2: Incentive ID is required. Row 16: Maximum Amount per Incentive must be a positive number.
Fix the listed items in your spreadsheet and import again. There's no risk of a half-finished import.
Column reference
Column headers must match exactly. Any column Snugg Pro doesn't recognize is simply ignored, so you can keep your own notes columns in the file if that's helpful.
Required columns
Column | Accepted values |
Incentive Source Name | Must already exist in the program (see above) |
Incentive ID | Up to 100 characters, unique within the file |
Title | Up to 200 characters, unique within its incentive source |
Incentive Type | Instant Rebate, Post Purchase, or Tax Credit |
Beneficiary | Homeowner, Multifamily Building Owner, Contractor, Other, or Any |
Household Income | Any, Less than 80% AMI, Between 80% and 150% AMI, 80% AMI and Greater, Greater than 150% AMI, LMI, or LMI 80 - 120 |
Valid From | YYYY-MM-DD or MM/DD/YYYY. Must be within the last 10 years |
Valid Until | YYYY-MM-DD or MM/DD/YYYY. Must be later than Valid From |
Allow incentive amount to exceed calculated maximum amount | 1, yes, or true for yes; anything else is treated as no |
Limit per Household | A positive number. If greater than 1, it must be a whole number from 2 to 99 |
Optional columns
Column | Accepted values |
Status | Draft or Published. Left blank, the incentive is saved as a draft |
Description | Free text |
Eligible Measures | Measure IDs separated by commas, for example 9,25,26. Blank or All means all measures |
Minimum Total Energy Savings | A number from 0 to 100 |
Fixed Amount | See below |
Maximum Amount per Incentive | See below |
Up To | See below |
Amount Relative To Job Data | See below |
Files To Upload | Must be valid JSON |
Setting the incentive amount
Every row needs exactly one way of calculating its amount. Pick one of these three and leave the other columns blank:
1. A flat amount — fill in Fixed Amount with a positive number. Leave Maximum Amount per Incentive, Up To, and Amount Relative To Job Data empty.
2. A percentage of costs — fill in Maximum Amount per Incentive (a positive number) and Up To (a number from 1 to 100, representing a percentage).
3. An amount based on job data — fill in Amount Relative To Job Data with a JSON rule, for example:
[{"amount": 300, "per": 10000}]
Both amount and per must be positive numbers. You may also add Up To, but not Maximum Amount per Incentive.
Mixing methods causes an error, such as:
Fixed Amount cannot be used together with Maximum Amount per Incentive. Amount Relative To Job Data cannot be used together with Maximum Amount per Incentive.
A safe way to work
If you're editing incentives in bulk for the first time, this order keeps things predictable:
Add any new incentive sources in Snugg Pro first.
Export to CSV, choosing Generate IDs if you're prompted.
Edit the file in your spreadsheet program, leaving the Incentive ID column alone.
Import the file and confirm the imported and updated counts look right.
Common questions
My drafts didn't export. Why? Only published incentives are included in the export. Publish anything you want in the file first.
Can I use the export file to create incentive sources in another program? No. Incentive source records are never created by an import. Add the sources to the destination program by hand first, then import the incentives.
I imported the same file twice. Did I create duplicates? No, as long as your Incentive IDs stayed the same. The second import matches the existing records and updates them.
One row is bad. Can I import the rest? Not in a single pass — imports are all-or-nothing by design, so you never end up with a partial update. Fix the errors listed in the message and import again.
Nothing happened when I clicked import. Check that the file is a .CSV and that all required column headers are present and spelled exactly as listed above. A missing header produces an error like "The required column 'Title' is missing."
