Notes
What is a CIF catalog?
A CIF catalog is a text file in Catalog Interchange Format: a header of key-value lines, a body of comma-separated item rows between DATA and ENDOFDATA, and nothing after that. Suppliers upload it to SAP Business Network so a buyer on SAP Ariba can search their items, either as a full catalog with prices or as a PunchOut index.
Updated
What a CIF file is
CIF, the Catalog Interchange Format, is the flat-file catalog format of SAP Ariba. A CIF file has three parts: a header with attributes for the whole file, a body with one item per line, and a trailer. The file name ends in .cif, and SAP recommends the same file name for every version of a catalog.
A supplier uses it in two ways:
- as a static catalog: every item with its price and unit, loaded into the buyer's procurement system and searched there;
- as a PunchOut index: items without a binding price that point to your store, so a click in the buyer's search opens your product page.
The rules below are from SAP's Customer Catalog Format Reference for SAP Business Network, checked on October 3, 2026.
The header
The first line declares the version. Every line after it is a key and a value, KEY: value, one per line, in any order. Keys are case-insensitive and values are case-sensitive. SAP silently ignores keys it does not know.
| Key | Required | Default | What it sets |
|---|---|---|---|
CIF_I_V3.0 |
yes | the version; always the first line | |
CHARSET |
yes | Cp1252 (Windows Latin-1) |
the character set; UTF-8 for anything beyond Western European |
CURRENCY |
yes | USD |
ISO 4217 currency of the prices |
CODEFORMAT |
yes | UNSPSC |
the commodity code system, optionally with a version |
SUPPLIERID_DOMAIN |
yes | what the supplier ID is: DUNS or NETWORKID |
|
UNUOM |
yes | FALSE |
TRUE for UN units such as EA; FALSE means ANSI units |
FIELDNAMES |
yes | the columns, ASCII only, names matched exactly | |
LOADMODE |
yes | F |
F for a full catalog, I for an incremental update |
TIMESTAMP |
yes | YYYY-MM-DD hh:mm:ss, 24-hour clock |
|
ITEMCOUNT |
no | the number of item rows, used for error checking |
Two defaults matter. A file without CHARSET is read as Windows Latin-1, so a UTF-8 "é" shows as two wrong characters. A file without UNUOM: TRUE is read with ANSI units, while SAP notes that most buying organizations use the UN codes.
The 12 fixed fields
Every row starts with 12 fields in a fixed order. Empty fields still need their commas. Optional fields follow after the twelfth, in the order FIELDNAMES declares them.
| # | Field | Required | Limit |
|---|---|---|---|
| 1 | Supplier ID |
yes | 255 characters; SAP Ariba solutions read up to 128 |
| 2 | Supplier Part ID |
yes | 255 characters, 128 read; never ?, { or } |
| 3 | Manufacturer Part ID |
no | 255 characters |
| 4 | Item Description |
yes | 1,000 characters: 2,000 bytes in Unicode |
| 5 | SPSC Code |
yes | 40 characters, digits only, usually UNSPSC |
| 6 | Unit Price |
yes, except for PunchOut items | decimal |
| 7 | Unit of Measure |
yes, except for PunchOut items | 32 characters, a UN or ANSI code |
| 8 | Lead Time |
no | whole business days |
| 9 | Manufacturer Name |
no | 255 characters |
| 10 | Supplier URL |
no | 255 characters |
| 11 | Manufacturer URL |
no | 255 characters |
| 12 | Market Price |
no | decimal, for comparison only, not displayed |
The description limit is in bytes underneath. SAP's own example: Japanese characters take 3 bytes each in UTF-8, so a Japanese description stops at 666 characters. An English description with 30 accented characters, each 2 bytes, at 980 characters in total is 950 + 30 x 2 = 1,010 bytes, well inside.
Writing the rows
The body is CSV with strict rules. Each line is one item; blank lines are not allowed; a line return ends the item even inside quotes. A comma means "next field", so any text with a comma is quoted, and a quote inside quoted text is doubled. Prices take a point or a quoted comma as decimal separator, no thousands separator and no currency symbol.
| Value in the ERP | In the CIF row | Rule |
|---|---|---|
Duplex receptacle 20 A, white |
"Duplex receptacle 20 A, white" |
a comma in the text: quote the field |
Faceplate, 4.5" high |
"Faceplate, 4.5"" high" |
a quote inside quotes: double it |
1.250,00 |
1250.00 or "1250,00" |
no thousands separator; a decimal comma is quoted |
$9.60 |
9.60 |
no currency symbol |
39.12.14.06 |
39121406 |
commodity codes without punctuation |
| text with a line break | one line | a line return ends the row |
A catalog of item 10482 for one customer, in full:
CIF_I_V3.0
CHARSET: UTF-8
LOADMODE: F
CODEFORMAT: UNSPSC
CURRENCY: USD
SUPPLIERID_DOMAIN: NETWORKID
UNUOM: TRUE
ITEMCOUNT: 2
TIMESTAMP: 2026-10-03 09:00:00
FIELDNAMES: Supplier ID, Supplier Part ID, Manufacturer Part ID, Item Description, SPSC Code, Unit Price, Unit of Measure, Lead Time, Manufacturer Name, Supplier URL, Manufacturer URL, Market Price
DATA
AN01000000001,10482,,"Duplex receptacle 20 A, white, tamper resistant",39121406,9.60,EA,3,,,,12.50
AN01000000001,10483,,"Duplex receptacle 20 A, ivory, tamper resistant",39121406,9.60,EA,3,,,,12.50
ENDOFDATA
The prices are the contract price of that customer, 9.60, with the list price of 12.50 as Market Price. A catalog belongs to one customer; a second customer with its own prices gets its own file.
Full and incremental loads
LOADMODE: F replaces the whole catalog. LOADMODE: I sends only changes: a row whose item ID already exists is an update, a new one is an addition, and a row with T in a Delete column removes the item. In a full load, delete rows generate errors.
The arithmetic for a customer catalog of 4,000 items, in a month where 40 prices change and 12 items are discontinued:
- full load: 4,000 - 12 = 3,988 rows,
ITEMCOUNT: 3988 - incremental load: 40 + 12 = 52 rows,
ITEMCOUNT: 52, of which 12 carryDelete=T
SAP Business Network takes CIF files up to 200 MB. A larger catalog is split: the first file with LOADMODE: F, the others with LOADMODE: I, each uploaded and published in turn.
A PunchOut index in CIF
A PunchOut index uses the same format with two more columns declared in FIELDNAMES: PunchOut Enabled set to TRUE, and PunchOutLevel with store, aisle, shelf or product. Unit Price and Unit of Measure stay empty, because the price comes from your store in the session. SAP's Level 2 table asks for a Supplier URL on every index item; a dummy URL is enough for compatibility with Ariba Buyer 8.x.
FIELDNAMES: Supplier ID, Supplier Part ID, Manufacturer Part ID, Item Description, SPSC Code, Unit Price, Unit of Measure, Lead Time, Manufacturer Name, Supplier URL, Manufacturer URL, Market Price, PunchOut Enabled, PunchOutLevel
DATA
AN01000000001,10482,,"Duplex receptacle 20 A, white, tamper resistant",39121406,,,,,https://store.example.com/punchout,,,TRUE,product
ENDOFDATA
PunchOutLevel is read only by SAP Ariba Buying and Invoicing. For store, aisle and shelf items the buyer's search shows only the first 50 characters of the description.
Where CIF files fail
For buyers without their own content management system, SAP Business Network validates the file before it publishes it. For buyers with one, the buyer's system validates it and reports back as "Validation Errors Found by Customer".
| Check | What fails |
|---|---|
| Structure | the header does not start with the version line, or DATA and ENDOFDATA are missing or misplaced |
| Count | ITEMCOUNT differs from the number of rows; a line break inside a description makes one item two rows |
| Field lengths | any field over its maximum |
| Duplicates | two rows with the same supplier ID, part ID and auxiliary ID |
| Prices | a malformed price or no currency |
| Units | a unit that does not match the standard set by UNUOM |
| Commodity codes | a UNSPSC code that is not in the supported version, v25.9 since May 24, 2024 |
| Supplier ID | a value that does not match the network ID or D-U-N-S number declared for your organization |
A buyer can relax some semantic checks, such as UNSPSC codes, units or zero prices. The syntax checks always apply.
What this means for your integration
A CIF catalog is an export of your item and price data per customer, and the failures above come from data that is fine in the ERP and wrong in CIF: a decimal comma, a code with dots, a line break in a description, a unit called "pcs". The integration writes the file from the ERP and the store, applies these rules per field, counts the rows, and checks lengths, units and codes before upload, so a rejected catalog is caught on our side.
When the catalog is a PunchOut index, the same export feeds the session that follows: the part numbers in the index have to open product pages in your store. How the index and the session work together is on Level 2 PunchOut, and the whole PunchOut flow on the PunchOut hub. How a file catalog compares with a live store is on PunchOut vs hosted catalog.
Frequently asked questions
Is CIF the same as CSV?
The body is CSV, with quotes around any field that holds a comma. CIF adds a header that declares the version, the character set, the currency, the commodity code system and the field names, and the DATA and ENDOFDATA lines around the rows. A plain CSV export from a spreadsheet has none of these and is refused.
Which version should I use, CIF 2.1 or 3.0?
CIF 3.0, with the first line CIF_I_V3.0. SAP documents that CIF 2.1 supports only the 12 basic fields and no PunchOut items, multi-language descriptions, multi-currency prices, expiration dates or parametric search. Both have the .cif extension.
Can I build a CIF file in Excel?
Yes, with care. SAP Business Network has an Excel to CIF converter for files up to 1 MB. A file saved by hand has to keep leading zeros in part numbers, use a point or a quoted comma as decimal separator, and be saved as UTF-8; SAP warns that Notepad's "Unicode" option writes raw UCS-2, which is not file-safe.
How does SAP Ariba tell items apart?
By the combination of Supplier ID, Supplier Part ID and Supplier Part Auxiliary ID, not by the description. A box and a bag of the same part number are duplicates unless they have different auxiliary IDs, and two rows with the same combination fail validation.
Should a Level 2 PunchOut index be CIF or cXML?
SAP accepts both and names cXML the preferred format for Level 2, because the file is smaller. CIF works the same way with two extra columns, PunchOut Enabled and PunchOutLevel. The session that follows a click is described on Level 2 PunchOut.
Tell us what you need
Tell us which systems you use and what needs to work better. We reply personally within one working day. We help you define the work, then agree the price and timing before you commit.
- You know the price and the timeline before you commit to anything
- We work out the connection that takes the work off your hands
- We handle the build, hosting, monitoring and maintenance
- Your team has less information to retype and fewer discrepancies to chase