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
-
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.
-
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.
-
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.
-
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.
-
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.
-
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.
-
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?
How often is the sheet read?
Does Excel or another spreadsheet work?
What happens to a row I edit after it has been imported?
And if I delete a row from the sheet?
Will my older orders be imported?
Can I put several products on one row?
Can I keep the sheet and also have a connected store?
What happens if the sheet becomes unreachable?
Also worth reading
- Integrations: getting orders in without retyping them Four ways to get an order into a COD platform: a connected store, a spreadsheet, a webhook or the API. Which …
- Connecting a YouCan store to your order management How to link a YouCan store to a COD platform: authorisation, orders arriving in real time, the role of the SK…
- Webhooks: pushing orders in and getting statuses back A webhook tells a system the moment something happens. How to push orders into a COD platform, receive delive…
- The REST API: driving COD orders from your own code The seller API lets you create and track cash-on-delivery orders from your own code: API keys, reading the ca…
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