Your catalog CSV¶
You do not need an API, a developer, or any integration work. You upload the spreadsheet you already keep, and it becomes live listings.
Upload it from the Supplier Portal at app.markabaai.com → Upload CSV.
Start from the template¶
There is a Download template button next to Upload CSV. It has the correct header row and filled example rows.
Use it. The single most common reason a first upload is rejected is a column named something we do not recognise, and starting from the template removes that entirely.
You can also download it directly: markabaai-supplier-catalog-template.csv.
The five columns you cannot skip¶
| Column | What goes in it |
|---|---|
name |
The part name. This is its identity — see the warning below. |
category |
One of the eight categories listed below. |
condition |
genuine, aftermarket, or used. One row per condition. |
price_aed |
Retail price — what a car owner pays. |
stock |
How many you hold. |
The eight categories: Engine · Brakes · Suspension & Steering · Electrical · Tyres & Wheels · Exterior · Interior & Comfort · Drivetrain.
Keep your part names stable
The name is how we recognise a part. Upload the same name next month and it updates that listing. Change the spelling and you create a second listing beside the first.
This is also what makes a daily export safe: re-uploading the same sheet updates, it never duplicates.
Columns worth filling in¶
In rough order of value:
compatible_makes/compatible_models— the highest-value optional columns by a distance. They are what lets a car owner filter to their own car, and what makes the AI's fitment matching land on your part. Put several values in one cell separated by a pipe (Toyota|Nissan) — a comma would split the CSV column.brand,sku— trust signals on the listing, and how a workshop recognises the part.warranty_months,description,tags,name_ar— nice to have.name_aris searchable, not just displayed, so it is worth filling if you sell to Arabic-speaking customers.wholesale_price_aed— only if you sell to workshops. See Wholesale orders.
Two rows, same part, different condition¶
Two rows sharing a name with different condition values become one part with two pricing
tiers — which is exactly how a customer sees it: one listing, a choice of genuine or
aftermarket.
This is usually the moment the format clicks. You are not creating two competing listings; you are giving one part two options.
Reading the report¶
After every upload you get a report: how many rows were applied, how many new parts and new listings were created, and a table of every rejected row with its reason.
Bad rows never fail the file. The good rows land regardless. Fix the rejects and re-upload — only the fixed rows change anything.
The rejections you will actually see¶
| Reason | What it means | What to do |
|---|---|---|
invalid condition |
You wrote "new", "OEM" or "refurbished" | Map it to genuine, aftermarket or used |
missing name / missing category |
A blank cell — usually a trailing empty row | Delete the empty rows at the bottom of the sheet |
a part named X already exists in category Y |
Same name filed under a different category | Pick one category, or rename the part |
already listed by another supplier |
Another supplier got there first on that part and condition | See the caveat below |
part option … already exists in the catalog |
It is one of our own hand-created parts | Ask us for the price-sync format for it instead |
price delta … exceeds ±80% |
The price moved more than 80% since last time | A deliberate hold against a typo. Confirm it is real and tell us |
supplier not verified |
Your account is not verified yet | Nothing was written. See below |
One supplier per part, per condition
A part at a given condition can be listed by one supplier. The catalog holds a single retail price per tier, so the second trader to upload the same aftermarket brake pad is told it is taken.
We would rather say this plainly than have you find out from a rejected row. If it is blocking real business for you, tell us — it is a product limitation we are tracking, not a policy.
Two limits¶
- 500 new parts per upload. Rows past that are reported individually, not lost. Split a bigger sheet and upload it in parts; the second upload picks up where the first stopped. Rows that update an existing listing are not affected by this cap.
- 2 MB per file, which is roughly 20,000 rows.
Verification comes first¶
Nothing you upload reaches the live catalog until your account is verified. An unverified supplier's rows are held: you still get the full report, so you can see exactly what would have been created, but nothing is published.
This is checked before anything is created, not after, so a held upload leaves no half-created parts behind.
Behaviour checked against Markaba AI v0.181.0 · reviewed 2026-09-22