Glasshouse reads and writes plain CSV files: the kind that open in Numbers, Sheets, or Excel. You can export everything you have recorded, bring in a spreadsheet you have kept for years, or move over from Orchid Album. This page walks through all of it.
Start on the web for big files. The import runs the same everywhere, but the web app at glasshouse.celerycity.app gives a large preview more room. The phone app's own import screen points here for big spreadsheets. Sign in with the same account you use on your phone and everything you import syncs to every device.
Exporting your collection
Open Settings and choose “Export collection”. In the app's words: “Everything you've recorded, as two plain CSV files — they open in Numbers, Sheets, or Excel, and Glasshouse can read its own export back in full.”
- Plants: every plant in every state, one row each, covering the garden, wishlist, and graveyard, saved as
glasshouse-plants-YYYY-MM-DD.csv. - Care history: every logged watering, feeding, repotting, treatment, and observation, saved as
glasshouse-care-YYYY-MM-DD.csv.
Both files round-trip. Re-importing the plants file is recognized as a Glasshouse export and read back column for column; re-importing the care file adds only entries that are not already in your log. The files carry references to your photos, not the pictures themselves, so they stay small and your photo library stays where it is.
The template
Open Settings, choose “Import a
spreadsheet”, and press “Download the
template” (“Every supported column with two example
rows, ready to fill in.”). The file arrives as
glasshouse-import-template.csv and is, by construction, a file
the importer accepts: fill it in, import it, done.
Only name is required. Every other column is optional, and a
blank cell simply imports as nothing recorded. The same table lives inside
the app under “Supported columns”. As the app
notes there: “The alternate spellings apply when importing a
spreadsheet that is not a Glasshouse export; a Glasshouse file is read by
its exact column headers.”
| Column | Also recognized | Required | Notes |
|---|---|---|---|
collection_no | #, no, num, number, id, tag, accession, accession no, collection number | Your plant’s number. Positive; gaps and fractional splits like 20.1 are fine. Blank = the next free number is assigned. 0 is reserved for wanted plants. | |
name | plant, plant name, orchid, orchid name, species, variety, hybrid, cross, title | Required | The plant’s name, as you label it. The only required column. |
tribe | genus, alliance, group, type, family | Genus or alliance ("Cattleya", "Phalaenopsis"). Blank imports as "Other". | |
size | maturity, stage | Maturity: BS, NBS, NB or SE. Anything else imports as blank. | |
status | condition, state | One of: blooming, budding, growing, dormant, recovering, sick. | |
color | colour, flower, flower color, bloom color | Free text ("Pink / Purple, Yellow"). | |
acquired | date, acquired date, date acquired, purchase date, purchased, bought, obtained, since | Date acquired — "2024-03-16", or free text like "Summer 23". | |
last_repot | repot, repotted, repot date, last repotted, potted, potting | When last repotted — a date or free text. | |
source | vendor, seller, nursery, supplier, from, origin, bought from, grower | Vendor or provenance ("Local orchid society sale"). | |
price | cost, paid, value, $ | Number; "$" and "," are ignored ("24.99" or "$24.99"). | |
reference_urls | url, urls, link, links, reference, references, website, web | Links, separated by " | ". | |
description | details, more, info, about | Long-form text about the plant. | |
notes | note, journal, log, history, comments, remarks, diary | One note per line, "date: text" ("2026-04-02: Repotted into fresh bark"). | |
zone | growing area, location, placement, spot | Your growing-space label ("Patio", "East window"). | |
receives_rain | rain, gets rain | "true" if the plant is exposed to natural rain; otherwise leave blank. | |
fragrant | fragrance, scent, scented | "true", "false", or blank. Blank means never recorded — "false" is a recorded not-fragrant, and the two import differently. | |
fragrance_note | fragrance notes, scent note | Free text riding a fragrant plant ("Light citrus in the morning"). | |
parentage_pod | pod parent, pod, seed parent, mother | Pod (seed) parent of a cross. | |
parentage_pollen | pollen parent, pollen, father | Pollen parent of a cross. | |
parentage | parents | A combined cross ("Cym. ensifolium × Cym. Enid Haupt"), split into pod and pollen when the two sides are unambiguous. Read only from spreadsheets that are not Glasshouse exports, and only when parentage_pod and parentage_pollen are blank. | |
awards | award, awarded | Award citations as free text ("HCC/AOS"). | |
last_watered_at | last watered, watered, last watering, last water | Instant of the latest watering, ISO ("2026-07-28T09:00:00.000Z"). | |
last_fertilized_at | last fertilized, fertilized, last feed, fed | Instant of the latest fertilizing, ISO. | |
lifecycle | — | One of: growing, gone, wanted. Blank falls back to "gone" when died has text, else "growing". | |
died | died on, death, death date, dead, deceased, rip, lost | When the plant died — a date or free text. Only read for gone plants. | |
death_note | cause of death, cause | Cause or eulogy for a gone plant. | |
wishlist_added_at | wishlist added | When a wanted plant was added — a date or free text ("October show"). | |
wishlist_source | — | Where a wanted plant was seen. | |
photo_count | — | Written by export for readability; ignored on import — leave blank. | |
photos_json | — | Written by export to restore photo links on the same device; leave blank when authoring. |
The column notes above are the app's own, word for word.
Importing your own spreadsheet
As the import screen puts it: “Bring in a CSV file — Glasshouse and English-language Orchid Album exports are recognized automatically, and other spreadsheets are matched by their column names.” You never pick a format; the file's header row decides.
- Open Settings and choose “Import a spreadsheet”.
- Press “Choose a file” and pick your CSV. Tab-separated files and CSVs saved as plain text work too.
- Review the preview. A Glasshouse export is read by its exact column headers; any other spreadsheet is matched by the alternate spellings in the table above, and the preview shows every match as a line like ““Vendor” → Source” with a sample value from your first row. Headed columns that match nothing are listed under “Won't be imported”.
- Check the possible duplicates, if any. The preview explains: “These names already appear in your garden or elsewhere in this file: … Matching names can be separate specimens.” They are left out by default; press “Include possible duplicates” if they really are second specimens.
- Press “Import” (it reads “Import new only” when possible duplicates are being held back). A progress line counts the rows as they save, and the summary that follows accounts for every row, including any that were skipped and why.
Updating what's already there
By default an import only adds new plants; rows that match something you already have are left untouched. To bring changes from a spreadsheet onto existing plants, turn on “Update matching plants” on the preview screen. Its own description is the whole contract:
“Matches by collection number first, then by name (ignoring case, punctuation, spacing, and × versus x); Orchid Album files match their own rows. Blank cells never overwrite saved details. Off leaves matching rows untouched.”
With the toggle on, the app briefly shows “Checking your care log…” while it confirms which care entries already exist, then previews exactly four outcomes before anything is written:
- “N new plants will be added.”
- “N plants will be updated.” Each one gets a card naming its basis and its changes, like “Matched by collection number · Color, Price”.
- “N rows already match what is saved and will not change.”
- “N rows will be skipped.” Every skipped row is listed with its reason.
Some things an update never does: it never touches a matched plant's photos, never moves a plant between the garden, wishlist, and graveyard, and never rewrites a matched plant's collection number. Blank cells in your file never erase saved details.
If two of your plants share a name, the row is skipped rather than guessed at, with a line like: “Row 5 · Dendrobium kingianum: two plants share this name; add a collection number to the row to say which one.” Give the row that plant's collection number and run the file again.
Coming from Orchid Album
Export a CSV from Orchid Album using its English-language export, then import it like any other file. Glasshouse recognizes the format automatically and says so: “Found 3 plants in orchid-album-export.csv — recognized as an Orchid Album export.”
What comes across:
- Your plants, with their names, genus, source, acquisition date, purchase price, awards, parentage, fragrance notes, and notes.
- Dated log entries become real care history: “2 dated log entries will come across as care history.”
- Watering schedules stay readable: “1 watering schedule found — their details will stay with the plants that use them.”
One thing cannot come across, and the app says it plainly: “Orchid Album CSV files do not contain photos. The plants and their written history will still be imported.”
Re-importing the same Orchid Album file is safe: its rows match their own earlier imports, so running the file twice never creates copies.
Troubleshooting
A plain import reports what was held back as counts in its summary. With “Update matching plants” on, the preview and the summary go further and name each skipped row with its reason, in the app's own words. Here is what each reason means and how to fix it; some appear only in specific modes, noted with each.
- “its collection number already belongs to another plant”
- Two plants cannot share a number. Change the number in the row, or blank it to have the next free number assigned. With “Update matching plants” on, a matching number is how a row finds its plant instead.
- “an earlier row in this file already claims this plant”
- Two rows in the same file resolve to the same plant. Keep the row you want and delete the other.
- “this exact row was imported before”
- This is re-run safety working as intended: the row was recognized from a previous import. Only Orchid Album rows carry the identity that makes this possible, so this reason appears for Orchid Album files. If you have since edited the row and want the changes applied, turn on “Update matching plants”.
- “its name matches a plant already in your garden, so it was left out”
- Held back so an import cannot quietly double your collection. If it really is a second specimen of the same plant, press “Include possible duplicates” on the preview.
- “the row could not be read”
- Usually a row with no name. Only
nameis required, but it is genuinely required. - “two plants share this name; add a collection number to the row to say which one”
- An update by name found more than one plant whose name matches once case, punctuation, spacing, and × versus x are ignored, so “Cattleya Kat Green” and “cattleya kat-green” count as the same name. Add the intended plant's collection number to the row and run the import again. This reason only appears with “Update matching plants” on; a plain import treats matching names as possible duplicates instead.
The preview says there is nothing to change
That is update-on-match confirming everything in the file is already saved: “Nothing to write. Everything in this file already matches your garden.” A re-import that changes nothing reports exactly that, rather than pretending to update.
My file is seen but nothing imports
Check the preview's column mapping: the one column that must be matched is the plant's name. If your name column is called something the table above does not list, rename the header (any of the alternate spellings works) or paste your data into the template.
A column of mine went to the wrong place, or nowhere
The preview shows exactly how every header was matched, and what will not be imported. Headers are matched case-insensitively, and spaces, hyphens, and underscores are treated alike. If a match is wrong, cancel, rename the header to the column name or an alternate spelling from the table, and choose the file again. The template's headers always match.
Questions growers ask
What happens to my collection numbers?
Numbers in your file are kept. Rows without one get the next free number assigned automatically. Gaps and fractional splits like 20.1 are fine, and an update never rewrites the number of a plant it matched.
Is it safe to run the same import twice?
Yes. A plain re-import holds back rows whose collection number is already taken and flags matching names as possible duplicates, so nothing is created twice by accident. Orchid Album files go further: their rows carry their own identity, so a repeat of the same file is recognized outright. And with “Update matching plants” on, changes land on the same plants rather than creating copies.
Do photos travel in these files?
No. CSVs carry references to photos, never the pictures themselves. Your photos stay in your photo library, and Orchid Album files do not contain photos at all.
Can an import move a plant to the graveyard or wishlist?
An update never moves an existing plant between the garden, wishlist, and
graveyard. New rows land in the state their lifecycle column
names, so an old export restores wanted and gone plants where they belong.
What about rows marked wanted?
A row whose lifecycle is wanted lands on the
wishlist. Wanted plants hold no collection number until you mark them
acquired.
Where does the imported data live?
In your account, like everything else you record: import on the web and the plants are on your phone when you open it. The privacy policy describes exactly what is stored.