Bulk-import properties
Updated 2026-05-15
Important: only .xlsx is accepted
Despite the common name "CSV import", PropFlow only accepts .xlsx (Excel format). If you upload a .csv file, you'll get a 422 error: "CSV uploads are not supported. Re-export as .xlsx from Excel or Google Sheets."
The reason: the template uses embedded dropdowns and header styling to keep your input clean. CSV can't preserve any of that, so the importer wouldn't give the same guard-rails.
Step 1: Download the template
- Sign in and go to Platform → System Configuration.
- Find the Imports section.
- Click Download template. You'll get a
.xlsxfile with a single sheet, headers in row 1, and dropdowns on the enum columns.
Step 2: Fill it in
One row per property. The template has 13 columns: 5 required, 8 optional.
Required columns (5)
- landlord_email — the email of an existing landlord in your organisation (case-insensitive). Hard error if not found — PropFlow won't auto-create landlords during property import.
- address_line_1 — street and house/flat number.
- city — city or town.
- postcode — full UK postcode. PropFlow uppercases and validates format.
- property_usage — one of
privateorsocial. Drives the compliance matrix (see Property usage types explained).
Optional columns (8)
- address_line_2 — flat number, building name, etc.
- property_type —
apartment,terraced_house,end_of_terrace,semi_detached,detached,studio,mixed_commercial,other. - bedrooms — integer.
- bathrooms — integer (includes ensuites).
- is_hmo —
TRUEorFALSE(as strings). Triggers HMO Licence + room panel post-import. - is_furnished —
TRUEorFALSE. Triggers PAT testing. - year_built — 4-digit year. Values below 2000 trigger the Asbestos Property Type obligation automatically.
- epc_rating —
AthroughG(records the rating; you upload the certificate later). - description — free text up to 2,000 characters.
Step 3: Upload
- Back at Platform → System Configuration → Imports, click Upload spreadsheet.
- Pick your
.xlsxfile. PropFlow validates the format and reads up to 1,000 rows per upload. - The upload runs server-side. Progress appears in the UI; usually under 30 seconds for a typical batch.
Step 4: Read the report
When it finishes you'll see a toast: "Upload complete · X created · Y skipped · Z error(s)". Expand the report table for the per-row breakdown:
- Created — green tick. New property added, compliance seeded.
- Skipped — amber. Duplicate of an existing property (same address_line_1 + postcode in your org). The existing record is kept unchanged.
- Error — red. Validation failed. The error message tells you the cause (missing required field, invalid enum, bad postcode, landlord_email not found, year_built out of range, etc.).
Bad rows don't block good ones — PropFlow processes each row independently and reports the outcome of each.
Limits
- Row limit: 1,000 rows per upload. Larger imports must be split.
- Format:
.xlsxonly. CSV is rejected. - Empty file: rejected with "Spreadsheet has no data rows."
- Tier gate: none. Available on every plan including Starter — though new tenancies you add after import still count against your plan's tenancy quota.
Compliance is seeded automatically
Each imported property goes through the same Intake Agent as a manually-added one. You'll get approximately 18 compliance obligations per property, seeded according to:
property_usage— Social gets the full set; Private gets the base set with optional extrasis_hmo— TRUE adds HMO Licenceis_furnished— TRUE adds PAT testingyear_built < 2000— adds Asbestos Property Type
Undoing a batch
If a whole batch came in wrong:
- Go to Platform → System Configuration → Imports History.
- Find the batch by filename and timestamp.
- Click Undo.
- PropFlow hard-deletes every property created by that batch, in the correct foreign-key order (compliance obligations, tenancies, applications, viewings, documents, photos, evidence packs, legal docs, alerts → then the property row itself). The audit log entries are kept.
Undo is irreversible — if you've already started using one of the imported properties (added a tenancy, uploaded a certificate), think carefully before undoing the whole batch.
Common errors and how to fix them
- "landlord_email not found in organisation" — add the landlord to your team first, then re-run. PropFlow won't auto-create landlords during property import (deliberate guard-rail).
- "Invalid property_usage; must be one of: private, social" — check capitalisation. Values are case-sensitive on import.
- "Invalid postcode format" — must be a valid UK postcode (e.g. SW1A 1AA). Spaces are normalised; case doesn't matter.
- "year_built must be between 1600 and the current year" — typos in this column are common (e.g.
198instead of1980). - "Maximum 1000 rows per upload" — split your file into multiple .xlsx files and run each separately.
Next steps
- Add your first property — the one-at-a-time flow if you've only got a handful.
- The compliance dashboard explained — what to do with the obligations once they're seeded.
FAQ
- Can I upload a CSV file?
- No. PropFlow only accepts .xlsx. The reason is that the template embeds dropdowns and header styling that CSV can't preserve, so the importer wouldn't be able to give the same guard-rails. If you only have a CSV, open it in Excel or Google Sheets and re-export as .xlsx.
- What happens to duplicates?
- PropFlow detects duplicates by matching Address Line 1 + Postcode within your organisation. Duplicate rows are skipped (status: 'skipped', reason: 'duplicate') with a link to the existing record. The existing record is not overwritten or modified.
- I made a mistake on the whole batch. Can I undo it?
- Yes. Go to Platform → System Configuration → Imports History, find the batch by filename/timestamp, and click Undo. PropFlow hard-deletes every property created by that batch (in the correct FK order so the delete cascades cleanly). The audit log entries are kept for forensic trail.
- Are tenancies imported too?
- No — the properties importer only creates property records. To add tenancies in bulk, you'd need to use the application/tenancy importers separately (where supported). For a typical migration, import properties first, then add tenancies one at a time or via the appropriate batch flow.
- Will compliance get set up automatically?
- Yes. Each imported property goes through the same Intake Agent as a manually-added one. PropFlow seeds the ~18 compliance obligations per property based on its property_usage, is_hmo flag, is_furnished flag, and year_built — exactly like the one-by-one form.
Ready to do this now?
Opens the relevant page in your PropFlow account.