Skip to main content
PropFlow AI
Self-managing landlord

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

  1. Sign in and go to PlatformSystem Configuration.
  2. Find the Imports section.
  3. Click Download template. You'll get a .xlsx file 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 private or social. Drives the compliance matrix (see Property usage types explained).

Optional columns (8)

  • address_line_2 — flat number, building name, etc.
  • property_typeapartment, terraced_house, end_of_terrace, semi_detached, detached, studio, mixed_commercial, other.
  • bedrooms — integer.
  • bathrooms — integer (includes ensuites).
  • is_hmoTRUE or FALSE (as strings). Triggers HMO Licence + room panel post-import.
  • is_furnishedTRUE or FALSE. Triggers PAT testing.
  • year_built — 4-digit year. Values below 2000 trigger the Asbestos Property Type obligation automatically.
  • epc_ratingA through G (records the rating; you upload the certificate later).
  • description — free text up to 2,000 characters.

Step 3: Upload

  1. Back at PlatformSystem ConfigurationImports, click Upload spreadsheet.
  2. Pick your .xlsx file. PropFlow validates the format and reads up to 1,000 rows per upload.
  3. 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: .xlsx only. 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 extras
  • is_hmo — TRUE adds HMO Licence
  • is_furnished — TRUE adds PAT testing
  • year_built < 2000 — adds Asbestos Property Type

Undoing a batch

If a whole batch came in wrong:

  1. Go to PlatformSystem ConfigurationImports History.
  2. Find the batch by filename and timestamp.
  3. Click Undo.
  4. 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. 198 instead of 1980).
  • "Maximum 1000 rows per upload" — split your file into multiple .xlsx files and run each separately.

Next steps

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.

Open bulk importer

Back to Self-managing landlord