Import guide

Import a CSV into a monday.com board

Boardfeed imports a CSV into a monday.com board from inside a board view: you upload the file, map its columns to board columns, check the values Boardfeed read, and run it. Every run is recorded with its counts and the reason for each row that did not land.

The limit worth knowing before you start: an uploaded file runs when you start it, never on a timer. The app says why, in these words — “Uploaded files run manually: a file you uploaded cannot be read again later, so it cannot run on its own. To schedule, import from a URL, a Google Sheet or a connected app.” For spreadsheet data that means a Google Sheet, which Boardfeed can fetch again by itself.

Last checked : the upload limits, the delimiter and encoding rules, the value check and the schedule rule, all read off the code.

Doing it by hand, every time

  1. Export the CSV again from the system that produced it.
  2. Upload it and map the columns again.
  3. Work out which rows are new and which are already on the board — or accept a second copy of everything.
  4. Fix the rows the board refused, one at a time, and re-upload them.
  5. Do the same next week, and the week after.

How it works in Boardfeed, step by step

  1. Upload the file once. Boardfeed reads .csv, .tsv and .txt through its CSV reader and .xlsx and .xlsm through its workbook reader, up to 100 MB, and answers with the first 20 rows and the type it read for each field.
  2. Map the columns: Boardfeed proposes a monday column per field and you change any of them. Edit that mapping later without losing the import or its history — what does not move on a saved import is the match column, and the app offers Duplicate for that.
  3. Check the values. The check runs the import engine’s own rules over a sample of the file, 20,000 rows by default, and lists every row in that sample it would refuse — row number, field, reason. It tells you how many rows it read rather than implying it read them all. Three things stay invisible to a sample, and it names them instead of staying quiet: a value monday rejects at write time, a label the mapping would ask monday to create, and a match key repeated past the end of the sample.
  4. Choose when it runs: manual, hourly, daily, weekly or a cron expression. For an uploaded file the control is fixed to manual. To put the same data on a schedule, keep it in a Google Sheet and import that instead — same mapping, same check, and a source Boardfeed can read again on its own.
  5. Save it and run it now. Every run is listed in the history with its counts, and a run that left rows out e-mails you those rows as a CSV.

Field mapping notes for CSV

This is the part that decides whether an import works on the first try. Everything below is handled in the mapping step, before the first run.

  • Encoding: UTF-8 with or without a BOM, and UTF-16, are detected outright. Anything else is a guess — decoded as Windows-1252, reported as latin1 and marked as a fallback, so “Anna Müller” arrives as typed and you can still see that the file was read on a guess.
  • Delimiters: comma, semicolon, tab and pipe. The delimiter is sniffed from the first 20 lines of the file rather than assumed from the extension.
  • Numbers are read per column, not per cell. Under the EU reading “1.250,00” is 1250, and the preview says which format it chose and on which example value it decided. A value that is not a number in any format — “45.00.00” — fails its row with the value named instead of quietly becoming a different number.
  • Dates: 03/09/2026 is ambiguous. The preview names the reading it took, with the date that reading produces, and says it could be the other one. Exporting ISO-8601 (2026-09-03) from the source system removes the question.
  • Empty cells are skipped rather than written as blanks, because a blank would clear the monday column. A column you mark required is the exception: the row is reported as missing that value instead of being written without it.
  • Codes that start with a zero: a numbers column stores 01234 as 1234. Map ZIP codes, SKUs and phone numbers to a text column.

CSV import questions

Can a CSV import run on a schedule?

Not an uploaded one — the file cannot be read again after the upload, so a schedule on it would stop working without saying so, and Boardfeed refuses to save one. Put the data in a Google Sheet, a URL or a connected app and the schedule is available: manual, hourly, daily, weekly or a cron expression. A scheduled import also needs a column to match rows on, or an explicit confirmation that every run adds new rows.

Will importing twice duplicate the items?

That is what the match column decides. Upsert matches each row against the key column you chose: it updates the item it finds, and creates one only where there is no match. Update-only writes to existing items and skips everything else. Create mode adds every row without reading the board at all. Inside one file, two rows carrying the same key are settled too — the last one wins, and the earlier rows are reported as skipped in the run history and the e-mail rather than dropped in silence.

What happens to the rows that fail?

Every row ends in exactly one of created, updated, skipped or failed, and the four counts add up to the number of rows in the file: a row that neither lands nor is reported is the one outcome Boardfeed treats as a bug. Each failure carries its row number, the field and the reason. A run that left rows out e-mails you those rows as a CSV, and its run history offers to re-import just them.

How large can the file be?

Up to 100 MB per upload. Nothing is loaded whole: the file is streamed to disk on the way in and read a row at a time on the way out, so a large file costs disk rather than memory. The preview reads 20 rows and the value check reads up to 20,000 by default.

Other sources