Documentation

Importing existing records

Bring a spreadsheet or a year of paper records into PoultryDesk safely, with a mandatory review before anything commits.

Last updated 2026-08-20

Importing existing records

If you are moving from paper, a spreadsheet, or another app, you do not have to key in your history one entry at a time. The Imports tool turns each row of a file into the same kind of record the in-app screens would have created - and it never commits anything until you have reviewed it.

What you can import

Open Data, choose Imports, then choose New import and pick the type. Common types include mortality, sales, expenses, customers, suppliers, an inventory snapshot, feed events, lots, and production. Each type has a CSV template you can download - a short file with the exact column names and example rows. First-timers should start from the template.

Importing Feed events

Every Feed row needs a Lot and quantity. Choose one source path for each row:

  • Inventory-backed Feed: fill in Feed item key and, when needed, Storage location key and Batch ID. Leave Source Expense ID and Direct-at-expense reason empty. PoultryDesk applies the same stock, batch, and cost checks used by Feed capture.
  • Direct Feed Expense: fill in Source Expense ID and a reason of 10 to 500 characters. Leave the Inventory item, location, and batch fields empty. The Expense must be an active non-inventory Feed Expense allocated to the same Lot.
  • Quantity-only history: Organizations without the Inventory module may leave both source groups empty. The row records Feed history without creating Inventory or cost entries.

Do not mix Inventory and direct Expense fields in one row. The review step rejects mixed or incomplete source details before commit. Each committed row keeps its import batch and source-row number for audit and retry safety.

Importing layer production

Each Production row records one Lot's total for one day. Use either of these formats:

  • Fill Trays and Loose eggs, plus optional Damaged eggs. PoultryDesk converts the row to individual eggs using 30 eggs per tray. Loose eggs must be 29 or fewer.
  • Fill Eggs collected with the total individual egg count, plus optional Damaged eggs.

Do not fill Eggs collected together with Trays or Loose eggs on the same row. The review step rejects mixed formats. Production imports currently accept daily totals only; import Morning and Afternoon split collections as a combined daily total.

The steps

  1. Pick the type and, if you like, download its template.
  2. Upload your file. Choose a .csv file up to 50 MB. The file must be saved as UTF-8; if it is not, PoultryDesk asks you to re-export it.
  3. Validation runs. PoultryDesk parses every row and shows how many are valid, how many have warnings, and how many have errors.
  4. Review. This step is required - there is no auto-commit, even for a clean file. The review panel lists row status, errors, warnings, and possible duplicates in filterable pages.
  5. Resolve issues. Download the repair CSV for an issue-only worksheet with original invalid values and suggested fixes, then correct the source file and re-upload it. The worksheet is read-only. Warnings are non-blocking; explicitly skip a warned row when it should not be imported, such as a confirmed duplicate.
  6. Commit. A Manager or Owner can commit after all errors are fixed. Committing writes the accepted valid rows and gives you a summary, such as "imported 412 mortality events across 3 lots". Any skipped or failed rows remain visible with their source-row reason, and interrupted commits can be retried safely.

After importing

Each imported record appears on the relevant flock, customer, or supplier timeline, marked with the import batch it came from. From then on it behaves exactly like a record entered in the app.

Uploading the exact same file again does nothing and tells you it was already imported, so you cannot double-count by accident.

See also