Skip to content

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.comUpload 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_ar is 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