Catalog requirements
The following sections outline the requirements for setting up catalogs with Rokt. Rokt reads feeds built to the Google product data specification and the Meta catalog specification, so in most cases you can send the feed you already produce without editing it.
File uploadDirect link to File upload
SpecificationsDirect link to Specifications
- A UTF-8 encoded CSV file containing the products in the catalog.
- Up to 250,000 rows in one file.
FormattingDirect link to Formatting
- Must contain a header row.
- Although double quotation marks are not required, Rokt recommends them to prevent values being misread. Single quotation marks are treated as part of the text.
- Prices are a number followed by the ISO 4217 currency code, for example
123.45 USD. - Add any UTM parameters or third-party tags to the end of the product URL in the
linkcolumn.
UpdatingDirect link to Updating
Upload a new file to refresh the catalog. Your ads update with the latest product data once the file is processed.
How Rokt handles a value it cannot useDirect link to How Rokt handles a value it cannot use
A product is rejected when something essential is missing or unusable: an ID, title, description, brand, price, availability, a working link, or a working image. A value that is too long in a descriptive field, such as title, description, product type, or a custom label, is shortened and recorded as a warning, and the product still serves. A value that is too long in an ID, link, image link, price, or brand rejects the product, because shortening it would change the product or break the link.
Scheduled fetchDirect link to Scheduled fetch
SpecificationsDirect link to Specifications
- An HTTPS URL for a product feed you host, or that a feed provider hosts for you.
- Uncompressed CSV, as above, up to 500 MB.
Never include credentials in the URL. Enter a username and password in the source settings. Rokt stores them encrypted and uses them only when it collects your file.
FormattingDirect link to Formatting
- The URL should include the file name but not credentials, for example
https://example.com/rokt_catalog.csv. - Add any UTM parameters or third-party tags directly into the feed.
UpdatingDirect link to Updating
The catalog refreshes daily and your ads update on refresh. Use Fetch now to collect immediately after a change. Keep the file at a stable address, because changing it means reconfiguring the source.
Catalog APIDirect link to Catalog API
- Send products in batches under a Rokt-issued credential. Create, replace, and remove products, and check your credential before you start sending.
- Up to 5,000 products per request.
- Valid items in a batch are ingested even when others in the same batch fail. Invalid items are returned in the response with the reason for each.
Required fieldsDirect link to Required fields
Products in a catalog must contain data in these fields. A product missing one of them cannot serve, and you see an error against it in your feed report.
| Field | Description | Requirements and recommendations |
|---|---|---|
id | The unique identifier of the product variation. Rokt recognizes a product by this value, so if it changes, the product is treated as new. |
|
title | The name of the product. This appears in the caption of your ad. |
|
description | Description of the product, to help a customer reach a purchase decision. May appear in the ad caption depending on your campaign settings. |
|
link | The product's landing page URL. |
|
image_link | URL of the product's main image. This is what a customer sees in your ad. |
|
price | Selling price of the product. Appears in the ad caption. |
|
availability | Whether the product can be bought. |
|
brand | The product's brand name. |
|
Send product_type, google_product_category, or both. Rokt uses your product_type first. Where you do not send one, Rokt maps your google_product_category to its own taxonomy. A product with neither is still imported, but it is held and does not show in ads until a category is set or suggested.
Recommended fieldsDirect link to Recommended fields
Rokt strongly recommends including these to improve data quality and performance. Send as many as you hold.
| Field | Description | Requirements and recommendations |
|---|---|---|
item_group_id | Ties the variations of one product together. |
|
google_product_category | The product's category in the Google taxonomy. | A valid category ID or taxonomy path. |
product_type | Your own product categorization. | 750 characters maximum. |
sale_price | The discounted price. Shown with the original struck through when lower than price. | Same format and currency as price. |
sale_price_effective_date | The window a sale price applies. | An ISO 8601 date range separated by a slash, for example 2026-11-01/2026-11-30. You can add a time and time zone, for example 2026-11-01T00:00-05:00/2026-11-30T23:59-05:00. Without it, a sale price always applies. |
inventory_quantity | Units in stock. | A whole number. Real stock depth stops Rokt serving something about to sell out. |
additional_image_link | Further images of the product. | Same rules as image_link. A comma-separated list or a JSON list. |
mobile_link | A mobile-specific landing page. | Same rules as link. |
variant_title | The name of the variation. | 300 characters maximum. |
condition | Condition at sale. | One of new, refurbished, used. |
gtin | Global Trade Item Number. | 8, 12, 13, or 14 digits, numeric. |
mpn | Manufacturer part number. | 70 characters maximum. |
color, material, size | Variation attributes. | Send these alongside item_group_id. |
size_type | Apparel cut. | One of regular, petite, plus, tall, big, maternity. |
pattern | Pattern or graphic print. | 100 characters maximum. |
gender | Who the product is for. | One of male, female, unisex. |
age_group | Age group the product is for. | One of newborn, infant, toddler, kids, teen, adult, all ages. |
expiration_date | The date a product stops showing. | An ISO 8601 date, for example 2026-12-31, read as midnight UTC at the start of that day. To stop at a local time, add a time and time zone, for example 2026-12-31T23:59-05:00. The only way to time-box a product from the feed alone. |
cost_of_goods_sold | Your cost of goods. | Same format as price. |
custom_label_0–custom_label_4 | Free-text tags for product set filters, such as a season or a priority tier. | 200 characters maximum each. |
custom_number_0–custom_number_4 | Numeric tags for product set filters, for range conditions text labels cannot express. | Whole numbers. No decimals or separators. |
average_review_rating, number_of_ratings | Review data, which can be shown in creative. | Numeric values. |
Field namesDirect link to Field names
Rokt accepts the current Google and Meta field names and the older names feed tools still emit. You do not need to rename columns.
| Also accepted | Read as |
|---|---|
url | link |
fullimage | image_link |
status | availability |
mobileurl | mobile_link |
custom1–custom5 | custom_label_0–custom_label_4 |
additional_image_links | additional_image_link |
Column names are matched without regard to capitalization or surrounding spaces, and a byte-order mark written by a spreadsheet export is ignored, so a file saved as UTF-8 from Excel or Google Sheets reads correctly.
CurrencyDirect link to Currency
Currency is a property of the source and is set when you create it. Every row in that feed must use the same currency code, and a row using a different one is rejected. If you sell in more than one currency, add a source per currency.
Fields Rokt does not acceptDirect link to Fields Rokt does not accept
Commercial rate columns are dropped. Rokt does not use margin, commission, cost per sale, or revenue share data. A column naming any of them is dropped and flagged in your feed report, and the rest of the feed is processed as normal. The match ignores punctuation and spacing, so cost-per-sale, cost_per_sale, and costPerSale are treated as the same column. Rates are set in your agreement with Rokt, not in a feed.
cost_of_goods_sold is a supported field and is not affected by this rule. Only rate columns are dropped.
Columns that look like personal data are dropped. Rokt drops any column whose name contains email, phone, name, address, or customer, unless the column is a field Rokt reads. This catches columns such as product_name, brand_name, and customer_segment, so put the product name in title and the brand in brand. A dropped column's values are not stored, not used, and not reported back. The test is deliberately broad, because personal data copied into a report cannot be recalled.