How to Export Product Metadata from Salsify
Salsify is built around product data exports. Here are three ways to get your product metadata into a spreadsheet, from one-click downloads to API-driven pipelines.
Salsify has a strong built-in metadata export. Any user can extract product metadata from a list view as an Excel file with all visible properties. For recurring or automated exports, Salsify Channels are the standard approach — they can be configured to output CSV, Excel, or XML on a schedule. The Salsify API provides full programmatic access for custom pipelines.
Salsify UI Export
The fastest path. Open any product list view in Salsify, and you can export the visible data as an Excel file with one click. The export includes all properties (columns) that are currently visible in your view.
Channel Export
Salsify Channels are the platform's built-in data export engine. Each channel maps product properties to output columns and can export as CSV, Excel, or XML. Channels can run on a schedule or be triggered manually. This is the standard approach for repeatable, production-grade exports.
Salsify REST API
The Salsify API gives you programmatic access to all product data. You can list products, retrieve specific properties, filter by any criteria, and handle pagination for large catalogs. The API uses a two-step export process: create an export run, then download the results.
import requests
import time
import csv
import json
API_KEY = "your_api_key"
ORG_ID = "your_org_id"
BASE_URL = f"https://app.salsify.com/api/v1/orgs/{ORG_ID}"
HEADERS = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json",
}
# Step 1: Create an export run
export_config = {
"configuration": {
"entity_type": "product",
"format": "csv",
"properties": [
"salsify:id", "salsify:name", "salsify:created_at",
"salsify:updated_at", "Product Name", "Description",
"Brand", "Category", "SKU", "Status"
]
}
}
resp = requests.post(
f"{BASE_URL}/export_runs", headers=HEADERS, json=export_config
)
run_id = resp.json()["id"]
# Step 2: Poll until complete
while True:
status = requests.get(
f"{BASE_URL}/export_runs/{run_id}", headers=HEADERS
).json()
if status["status"] == "completed":
download_url = status["url"]
break
time.sleep(5)
# Step 3: Download the CSV
csv_data = requests.get(download_url).text
with open("salsify_metadata.csv", "w") as f:
f.write(csv_data)
print("Export complete: salsify_metadata.csv")/digital_assets API endpoint.What metadata fields can you export?
| Field | UI Export | Channel Export | Salsify API |
|---|---|---|---|
| Product ID | ✓ | ✓ | ✓ |
| Product name | ✓ | ✓ | ✓ |
| Description | ✓ | ✓ | ✓ |
| SKU / UPC / GTIN | ✓ | ✓ | ✓ |
| Category / classification | ✓ | ✓ | ✓ |
| Brand | ✓ | ✓ | ✓ |
| Custom properties | ✓ | ✓ | ✓ |
| Created date | ✓ | ✓ | ✓ |
| Modified date | ✓ | ✓ | ✓ |
| Workflow / status | ✓ | ✓ | ✓ |
| Digital asset links | ✓ | ✓ | ✓ |
| Asset file name | ✓ | ✓ | ✓ |
| Completeness score | ✓ | ✓ | ✓ |
| Readiness report data | ✕ | With formulas | ✓ |
| Relationship data | ✓ | ✓ | ✓ |
| Variant data | ✓ | ✓ | ✓ |
- Export size limits: The UI export may be slow or time out for catalogs with 100,000+ products. For large catalogs, use a Channel export or the API with pagination.
- Property naming: Salsify property IDs (used in the API) may differ from display names shown in the UI. Check your property configuration for the correct IDs to use in API calls.
- Digital asset metadata: Asset-level metadata (dimensions, file size, MIME type) is stored separately from product metadata. You may need to join product and asset exports to get a complete picture.
You have your metadata export.
Now score it.
Upload your CSV or Excel file to MQS and get a structural metadata health score out of 100 with dimension breakdowns and actionable diagnostics.