Import Discoveries, Feedback, users and companies, and the associations between them, from a single Excel file. This is how you bring an existing backlog into Harvestr without losing who said what.
Which import do you need?
Settings > Import data offers four imports. Use Everything at once (this Excel import) only if at least one of these applies:
you're importing two or more object types with associations: feedback linked to Discoveries, feedback linked to customers
you're importing Discoveries with tags and/or custom fields
you're importing customers with segments and/or attributes
Otherwise, the CSV imports are faster:
If you're importing | Use | Limit per file |
Feedback with title, content and user emails/names, no companies, no labels | 500 messages | |
Discoveries with components, titles, descriptions and states, no tags, no custom fields | 2,000 discoveries | |
Customers with company names or user emails/names, no segments, no attributes | 3,000 rows |
Importing data is reserved for Editors and Owners.
Get the template
You must use this Excel template. The import reads it by position, so an edited structure fails.
Keep it as Excel (.xlsx, up to 5 MB): no CSV, no other format
Don't touch row 1, and don't rename sheets or headers. Fill from row 2, column A, on each sheet, and overwrite the sample data
Never leave an attribute value empty (
ARR:). The whole import fails
Limits per import
File size | 5 MB |
Discoveries | 5,000 |
Users and companies | 100,000 |
Feedback | 10,000 |
Tags, labels, segments, fields and attributes | 1,500 in total, unlimited values |
A file over a limit is stopped at upload, with the counts that exceed it. Split it into smaller files, or get in touch and we'll sort it out.
Run the import
Go to Settings > Import data and click Import on Everything at once. The import has three steps:
Upload: drop your .xlsx file or browse to it.
Check the file: Harvestr reads the three sheets and lists what it found.
Errors name the sheet and the row. The import cannot start until you fix them in the file and click Upload another file.
Warnings don't block the import: the row is imported and only the value in question is skipped. Click Show to read them.
A preview shows the first rows of each sheet. Click Next when it looks right.
Import: review how many Discoveries, tags, fields, users and companies, segments, attributes, feedback and labels the import will create or update, then click Import.
If the file contains segments, an Import settings dialog asks how to treat the segments of users and companies that already exist:
Overwrite existing segments (default): their segments are replaced by the ones in the file
Merge new segments with existing: the segments in the file are added to the ones they already have
Nothing is written until you click Import. Records then appear as they are created, and you get an email when the import is done.
How the file is structured
Three sheets
One sheet each for Feedback, Discoveries and Customers (shown as Users and companies in Harvestr). One row = one record, one column = one property.
Fill one sheet, two, or all three: whatever your import needs.
IDs
Every sheet has an ID column that must be filled for each row. Use an incrementing number or a random unique string.
These IDs exist only for the import: they're how rows reference each other, and they're never stored in Harvestr.
They must be unique within a sheet, but not across sheets.
Associations
Associations are declared on the Feedback sheet only:
Column D: the Discovery ID(s) this feedback belongs to
Column E: the Customer ID who gave it
Importing customers
Users, companies, or users with their companies.
Users
Required: id · user name or email (or both) · type = user
The unique identifier for a user is the email: it must be unique in the file. The id column is import-only and is never used to identify the user in Harvestr.
Optional:
company name: links the user to that companyphonedescriptionsegments: comma-separated (enterprise, Europe). Segments that don't exist yet are createdattributes: format[name]: [value], comma-separated (MRR: 499, Plan: Enterprise). Types: boolean (true/false,yes/no,0/1), text, number. Attributes that don't exist yet are created
Importing a user whose email already exists updates that user's fields.
Companies
Required: id · company name · type = company
The unique identifier for a company is its name: it must be unique in the file. As with users, the id column is import-only.
Optional:
domains: comma-separated. Used to auto-assign users to this company by email domaindescriptionsegmentsandattributes: same format and behavior as for users
Importing a company whose name already exists updates that company's fields.
Users with their company's attributes
Attributes belong to whichever record carries them, so you need two rows on the same sheet:
the user row:
id,user name,company name,email,type: userthe company row:
id,company name,attributes,type: company
The shared company name is what ties them together.
Importing Discoveries
Required:
idtitlecomponent: slash-separated for hierarchy (Master component / Sub-component 1 / Sub-component 2). Components that don't exist are created
Optional:
tags: comma-separateddescription: accepts HTMLstatus: the Discovery state. Falls back to your default state if emptyassignee email: the Harvestr teammate to set as owner. Ignored if it matches no teammatecreate date: ISO-8601fields: comma-separatedkey: valuefor custom field values and scores (ease: 3, impact: 4)The fields must already exist in your project. The import never creates a new Discovery field
Values must match the field's type in Harvestr: numeric, string, or boolean (
true/false,yes/no,0/1)Empty values fail the import
Dates must be ISO-8601:
2022-05-08 (day) · 2022-05-08T15:10 (minute) · 2022-05-08T15:10:10 (second) · 2015-06-10T10:40:38.974 (millisecond)
With the Z modifier: 2022-05-08T15:10Z · 2022-05-08T15:10:10Z · 2015-06-10T10:40:38.974Z
Any other format silently falls back to the default value.
Worked example
A Discovery "PayPal login" under Payment systems / PayPal, state In progress, tags payment, PayPal, impact 5.
Which lands in Harvestr as:
And creates the component tree if it didn't exist:
Imports create, they don't update. Importing a Discovery whose title already exists creates a duplicate rather than updating the original. Run a test import on a handful of rows before committing the full file.
Importing feedback
Required:
idcontent: the body. HTML and markdown both accepted
Optional:
titlecount as: a whole number (0 or more) setting how much this item weighs in the Discovery's feedback count. Use it when one imported row stands for several real requestsdiscovery id: comma-separated IDs from the Discoveries sheetcustomer id: the ID from the Customers sheet; this is the requesterlabels: comma-separated (high priority, financial)assignee email: ignored if it matches no teammatecreate date: ISO-8601 (see the format box above)source url: where the feedback originally came from
Linking feedback as you import it
Below, one feedback item is attached to customer 2 (John Doe) and categorized into two Discoveries, 1 ("PayPal login") and 2 ("Generate bitcoin wallets").
As with Discoveries, feedback is never updated by an import: a matching title or content produces a duplicate.







