Help

Importing your subcontractor list

If the list already exists in a sheet, do not retype it. Here are the column names that map on their own, and what the preview screen is and is not promising.

What a row actually needs

One column is required: the company name. Everything else can arrive later or never. That is deliberate, because the realistic starting point is a sheet somebody has been keeping for two years with gaps in it, and refusing the whole file over a missing phone number would mean nobody imports anything.

The one you will want anyway is the email address. A subcontractor with no email cannot be sent an upload link and cannot be reminded — Sealinn will tell you a reminder was skipped rather than reporting a send that did not happen, but a list imported without emails is a list you will be chasing by hand.

HeaderRequiredWhat it is
company_nameYesThe legal entity you contracted with. This is what has to match the certificate.
contact_nameNoThe person, not the company. Used in the greeting on the upload request.
emailNo, butWhere the request and every reminder go. Without it there is no automated chase.
phoneNoOnly used if you text a subcontractor yourself from their record, which needs a Growth plan.
tradeNoFree text. Useful mainly for filtering a long list.
stateNoTwo letters. Pre-filled from your organization's home state if you leave it blank.
Column headers that map without any configuration.

Headers are matched case-insensitively and a space works as well as an underscore, so `Company Name` and `company_name` both land. Anything Sealinn does not recognize is ignored rather than rejected — a sheet with ten columns of your own notes imports fine and the notes are simply not carried across.

The free template is the same contract

The COI tracking template is authored from the same header list, which is the point of it: a sheet built on that template imports in one click with nothing to rename. It also carries tracking columns that are deliberately NOT import fields, so your own status notes stay yours and never overwrite anything.

Three ways to get the list in

  1. Paste it. Copy the rows out of your sheet and paste them straight into the import screen. Fastest for a list you already have open, and it does not care which program the sheet is in.
  2. Upload a CSV. Export from anything and drop the file. Same header rules.
  3. Upload an Excel file. An `.xlsx` works directly — the first worksheet is read, the first row is treated as headers, and cell formatting is ignored.

An import is capped at 5,000 rows in one pass. If your list is longer than that, split it; there is no limit on how many times you import.

The preview screen, and what it is promising

Nothing is created until you confirm. The preview shows every row it parsed, marks the ones it cannot accept, and says why for each — a missing company name, a malformed email, a state that is not two letters.

Flagged rows are editable in place rather than sent back to your spreadsheet. That matters more than it sounds: the common case is a handful of rows with a typo in the email column, and fixing them in the preview is a minute where re-exporting is an afternoon. You can also add a row that was not in the file at all.

What the preview is promising is that the rows it marks as ready will be accepted. It checks the same rules the commit does, including the length limits that are easy to trip with a pasted address — a preview that passed a row the commit then rejected would be worse than no preview, because it would fail after you had already decided the import was clean.

When the whole file comes back wrong

One failure mode is worth naming because it looks alarming and is trivial: every row invalid, all with the same complaint about a missing company name. That is almost always the wrong file — an exported report rather than a subcontractor list, so the headers are something like `Field` and `Value` and nothing maps.

The import screen names the headers it found alongside the ones it expected, so the mismatch is visible rather than mysterious. Check you exported the list itself, or download the template and paste your data under its headers.

What happens after the import

One number is worth checking on the result: an import fills the room your plan has left rather than refusing the file, so a partial import reports how many it skipped — what counts toward that limit. Nothing is requested automatically. The subcontractors exist, they are measured against your requirement set, and every one of them reads as incomplete because no documents have arrived yet. That is the correct starting state and not an error.

A spreadsheet that is not a subcontractor list — rates, bond numbers, who signed what — has a home too, and it is not this screen: spreadsheets keeps that kind of grid next to the record it is about. The next move is requesting documents, which you can do per subcontractor or in bulk. If you have not set your requirements yet, do that first — and here is why the order matters.

Still stuck? Tell us what happened.

A person reads every message. Free for up to 10 subcontractors — no card.