Bulk Import
Onboard a fleet of sites, customers, and devices at once
Use Bulk Import to upload your fleet portfolio via CSV. Once complete, go to Integration Hub to enter OEM credentials and start syncing device telemetry.
File Requirements#
- Format: CSV only (
.csv) - Max file size: 5 MB
- Max rows: 1,000 per import
If your portfolio exceeds 1,000 rows, split it into multiple files and import them sequentially.
How to Import#
Step 1: Download the sample CSV#
In Texture, go to Connect → Bulk Upload and click Download Sample CSV. The sample includes all supported columns with example rows showing the expected format for each field.
If you're working from an existing spreadsheet, you don't need to rename every column — Texture automatically maps common variants (e.g. zip → postalCode, address → streetOne, fname → firstName, serial → systemIdentifier). If a column can't be confidently matched, Texture will prompt you to confirm the mapping before proceeding.
Step 2: Populate your data#
Fill in the required fields for each row. See the Data Reference below for all fields, which are required, and manufacturerSlug format requirements per manufacturer.
Step 3: Upload and preview#
Upload your CSV. Texture validates the data and shows a preview with any row-level errors highlighted. You can edit cells directly in the preview table before submitting.
Step 4: Submit#
Click Start Import. Texture processes the file and creates records immediately.
Some workspaces have staged imports enabled, which routes Dashboard uploads to a Data Review queue instead of creating records immediately. Your Solutions team reviews and promotes staged records before they go live. Imports via the Texture API always bypass staging.
Step 5: Get your entity IDs#
Once your import is processed, download the results CSV from the import job. It contains your original data plus Status, Error Message, customerId, siteId, and deviceId — the Texture-assigned IDs for every imported record.
Rows that included manufacturerSlug and systemIdentifier create devices that stay pending until you configure Integration Hub with OEM credentials; Texture then starts syncing their telemetry. Rows without those fields create customers and sites only, and are complete as soon as the import finishes.
Troubleshooting#
manufacturerSlug not recognized
The field is case-sensitive and must match exactly one of the values in the Supported Manufacturers table. The column name is manufacturerSlug (singular). Tesla, TESLA, solaredge, eg4, and other variations will fail.
Invalid address
All required address fields must be present and properly formatted: streetOne, city, state, postalCode.
Address undiscoverable in Mapbox Our geocoding partner can't locate the address. Verify the address exists and try alternate formatting if needed.
Invalid program reference
If programSlug or programId is specified, Texture validates it exists in your workspace during preview. Confirm the slug or ID is correct.
Blank rows Remove trailing empty rows before uploading — they cause validation errors.
For large migrations or complex data mapping, contact your Texture Solutions team or email support@texturehq.com.
Data Reference#
Required fields#
| Field | Notes |
|---|---|
referenceId | Your internal identifier for this customer — typically a userId, accountId, or siteId. Used to prevent duplicate customer creation and links all created records together. |
firstName | Customer first name |
lastName | Customer last name |
streetOne | Site street address |
city | City |
state | State abbreviation |
postalCode | ZIP or postal code (4-digit US zips are auto-padded to 5) |
Optional fields#
| Field | Notes |
|---|---|
email | Customer email. A unique email is preferred, but a shared address like team@company.com is accepted. |
phone | Customer phone number |
accountNumber | Utility billing account number — distinct from referenceId. Use when one billing account spans multiple premises. |
streetTwo | Apartment, suite, unit, etc. |
country | Defaults to US |
siteName | Display name for the site |
siteReferenceId | Your internal ID for the site, when different from referenceId |
manufacturerSlug | Device manufacturer — must be paired with systemIdentifier |
systemIdentifier | Manufacturer's ID for the device or system — must be paired with manufacturerSlug |
programSlug | Enroll the device in a program by slug. Triggers the full enrollment flow including eligibility checks. |
programId | Enroll the device in a program by ID. Takes precedence over programSlug if both are provided. |
tags | Comma-separated labels for grouping devices (e.g. boston,program-a) |
Supported Manufacturers#
These are the manufacturers Bulk Import accepts today, with the identifier format each one expects. It is a subset of the platform's full manufacturer support — see Devices & OEMs for everything Texture connects to, and Texture Connect for manufacturers a customer authorizes themselves.
manufacturerSlug | systemIdentifier format |
|---|---|
tesla | Site UUID (e.g. 550e8400-e29b-41d4-a716-446655440000) or DIN (e.g. 1538000-25-H--GF1234567) |
enphase | Site ID (numeric) |
solaredge-monitoring-api | Site ID (numeric) |
solaredge-web | Site ID (numeric) |
solaredge-grid-services | Site ID (numeric) |
eg4-electronics | Inverter serial number (numeric) |
franklinwh | aGate serial number — 20-character alphanumeric, prefix must be 1006, 1007, or 1013 |
emporia | Device serial number (22-character alphanumeric) |
chargepoint | Station serial number (12-character alphanumeric) |
sma | Plant ID (numeric) |
texture | Texture device CUID (begins with c) |