CODFamilia
Features How it works Pricing Blog FAQ Academy Sign up Sign in

Importing COD orders from a Google Sheets spreadsheet

Using a spreadsheet as your order source: sharing, columns to map, how rows become leads, what happens to incomplete rows, and the limits of a sheet as volume grows.

The essentials

What is it?
It is the most universal route in: a shared sheet, columns mapped once, and every row added becomes a lead. Anything that can write into a sheet — a form, a landing page, an automation tool, a person — effectively becomes an order source.
Who is it for?
Sellers with no online store, or who sell through social media and note their orders by hand, and those whose advertising form already writes into a spreadsheet. It is also the fallback when a store cannot call a URL on every order.
How does it work?
The sheet is shared read-only, or read through a linked Google account. The platform reads its rows, applies the column mapping, then creates one lead per row. Every row already processed is recognised by its content and is never imported twice.
What is it for?
Because a spreadsheet is the lowest common denominator of Moroccan e-commerce: free, immediate and understood by everyone. It removes retyping without requiring anything technical, which makes it the natural starting point.
How do you use it?
You need a sheet whose first row holds the column names, read-only sharing, and four columns at minimum: the customer's name, their phone number, the product SKU and the total to collect. A ready-made template, with the exact headings expected, can be downloaded from the seller workspace.

Using a Google Sheets spreadsheet as an order source means having the platform read that sheet at regular intervals and turn every new row into a lead once its contents have been checked.

The columns: what is required, what helps

A row becomes a lead once the platform can answer four questions: who the customer is, what number to call, which product was ordered, and how much the courier must collect. Everything else is useful but optional.

Column Required What happens if it is missing or wrong
Customer name Yes The row becomes a damaged lead
Phone number Yes Anything that is not a valid Moroccan mobile holds the row back
Product SKU Yes Unknown reference: damaged lead, naming the column that was read
Total charged Yes With no amount there is nothing to collect: the row is set aside
City No Also looked for in the address; otherwise settled on the call
Address No Asked of the customer during the confirmation call
Quantity No Treated as a single unit
Price per item No Used to check coherence against the total
Variant No Needed when a product has several and the SKU does not say which
Order reference No Passed through as written, to find the row again in your sheet
Order date No Lets the cut-off date be applied

How a row becomes a lead

Reading is not simple copying. Every row goes through the same checks as a manual entry: the phone number is normalised, the city is matched against the delivery city list — including its spelling variants — the SKU is looked up among the products you are allowed to sell, and the total is compared with the sum of the prices. A row that clears all of this becomes a lead and joins the confirmation queue.

A row that fails one of them is not skipped: it becomes a damaged lead, with its row number and the exact reason. That difference matters in practice, because an integration that quietly skips doubtful rows leaves the seller to discover three days later that sales went missing.

Finally, every processed row is recognised by the content of its mapped columns. One useful consequence: adding or editing a column that is not mapped — an internal note, a tracking column, a colour — re-imports nothing. Another, just as useful: correcting a row that failed is enough for it to be retried on the next pass, with nothing to delete and nothing to ask for.

Rows that arrive badly, and what causes it

The failure reasons are nearly always the same, and they nearly always come from the sheet rather than from the import.

  • A phone number turned into a figure — The spreadsheet turned "0612345678" into "612345678" by dropping the leading zero. The column has to be forced to text — this is the leading cause of damaged leads.
  • A city written differently — An abbreviation, a typo, a district name instead of the city. Matching covers many variants, but not all; the city is then settled on the call.
  • A missing or free-text SKU — The column holds the product name instead of its reference. The lead is damaged, and the reason names which column was read as the SKU.
  • A total with a symbol or separator — "299,00 DH" is understood, but a cell holding free text is not. An amount has to stay an amount.
  • Two columns with the same name — Two identical headers make the mapping ambiguous; they are told apart by their column letter, but renaming them is better.
  • An empty row in the middle — No effect: empty rows are ignored, and the rows after them keep being read.

Why a sheet is a good start and a poor system of record

This is worth saying plainly, because nobody says it at the moment you connect your first sheet: a spreadsheet is an excellent entry point and a very poor system of record. The reasons only appear with volume.

First, a sheet has no state. Nothing in it says who was called, when, with what outcome, or where the parcel is. So the seller adds status columns and updates them by hand — and past a few dozen orders a day, they are no longer up to date. Second, a sheet has no lock: two people working in it at the same time overwrite each other, and an agent can call a customer who was already called.

Third, a sheet does not work out what you earned. The profit on an order depends on the product price, the confirmation fee, the city's delivery fee, and the return fee when the parcel comes back. A formula written by hand survives neither a change of fees, nor a return, nor a partially delivered order.

So the sheet keeps its role, and it is a useful one: it is the collection point, because a form knows how to write into it. What happens after the lead arrives — the call, the parcel, the collection, the profit — belongs to order management, and that is exactly the boundary the import moves to the right place.

Linking a Google Sheets spreadsheet

  1. Prepare the sheet

    The first row must hold the column names, and each row after it one order. The simplest route is to start from the template downloadable in the seller workspace: its headings are exactly the ones the platform recognises, which removes most reading errors.

  2. Choose the reading mode

    Either share the sheet as "anyone with the link: viewer", in which case no Google authorisation is needed, or link your Google account, in which case the sheet can stay entirely private. Both lead to the same import.

  3. Paste the sheet address

    In Applications → Google Sheets, paste the sheet link. The tab is identified along with the document: if your orders live in a second tab, take the link shown while that tab is open.

  4. Map the columns

    The mapping screen shows your headers, with a sample value taken from the first data row, and proposes for each platform field the column that most resembles it. Check the proposal — the phone number and the total above all — then save.

  5. Set the start date

    State the date from which orders should come in. A sheet carrying several months of history must not dump its past into the confirmation queue; anything older than that cut-off is ignored for good.

  6. Run a first read

    The report says how many leads were created, how many rows became damaged leads, and why. This is the moment to fix the sheet: an ambiguous header, a city spelled differently, a missing SKU.

  7. Choose the rhythm, or go instant

    By default the sheet is re-read at regular intervals. If you want a row to leave the second it is written, a short script pasted into the sheet sends each new row straight through, without waiting for the next read.

Frequently asked questions about importing from a sheet

Does the sheet have to be shared publicly?
No. There are two modes: read-only sharing by link, which needs no Google authorisation, or linking your Google account, which lets the sheet stay entirely private. In both cases only reading is used.
How often is the sheet read?
At a regular interval set by the platform. For immediate sending, a short script pasted into the sheet forwards each new row the second it is written, without waiting for the next read.
Does Excel or another spreadsheet work?
The import reads a Google Sheets spreadsheet. An Excel file therefore has to be imported into Google Sheets, which takes seconds and keeps the same columns. The template provided opens correctly in both.
What happens to a row I edit after it has been imported?
Editing a mapped column produces a row treated as new, so a second lead. Editing a column that is not mapped changes nothing. That is why it is better to correct a lead inside the platform and leave the sheet alone.
And if I delete a row from the sheet?
The lead already created stays: it lives in the platform, independently of the sheet. Deleting the row neither deletes the order nor brings it back.
Will my older orders be imported?
Only those after the start date you set when connecting. Two barriers apply: that date, and a maximum age window. Anything older is ignored outright.
Can I put several products on one row?
Yes: separate the SKUs, quantities and prices with semicolons, in the same order. "CF-1001;CF-1002" with "1;2" orders one unit of the first and two of the second.
Can I keep the sheet and also have a connected store?
Yes, the sources coexist. Every lead keeps a record of its origin — the sheet row or the store reference — so the order can be traced back wherever it came from.
What happens if the sheet becomes unreachable?
The read fails and the connection shows why: sharing withdrawn, link changed, Google account disconnected. No row is lost, since nothing is deleted from the sheet — the import resumes where it stopped.

Also worth reading

One sheet, and your orders come in by themselves

A ready-made column template, mapping proposed automatically, incomplete rows isolated rather than lost, and a catalogue of 1 products to reference.

Sign up