3rd-party Formats  ›  Compare and Recycle

Compare and Recycle feed format

If you already produce a feed for the Compare and Recycle buyback platform, you can submit the same file to PriceFirst with no changes. A dedicated parser handles the format differences automatically — PriceFirst normalises it to the standard PriceFirst model.

This format has a different column schema than the PriceFirst format and — importantly — has no Category column. Instead, category routing is handled for you when the feed is activated by your PriceFirst integrator.

It inherits every shared feed rule (HTTPS, Device ID cap, status enforcement, 50p rounding, etc.).

Column schema

The file is typically tab-separated (the parser also accepts commas or semicolons). Column order is flexible and the header row is case-sensitive.

Required columns

ColumnMaps toRule
product_idDevice IDUnique per marchant, 1–128 characters. Duplicates within a single CSV are rejected.
productModelNon-empty. Becomes the product title. Also used for category detection and brand guessing.
pricePriceNumeric, greater than 0, rounded to the nearest 50p.

Optional columns

ColumnMaps toRule
networkNetworkCarrier from the network whitelist. Blank / none / n/a / wifi → stored with no network attribute (Wi-Fi-only).
conditionConditionMust resolve to one of the 7 base conditions (whitelist below). If omitted, defaults to good.
linkURL to the product page. Informational only — not stored.

How missing PriceFirst columns are resolved

PriceFirst columnHow it's resolved
BrandDetected from the product name using keyword matching (e.g. "iPhone" → apple, "Galaxy" → samsung). Falls back to unknown.
CategoryDetected from the product name and routed to the correct PriceFirst category automatically.
StorageExtracted from the product name (e.g. iPhone 15 Pro 128GB128GB).
StatusAll rows default to active.
ImageNot present in this format.
Last UpdatedNot present in this format.

Category detection

The parser reads each row's product column and determines the category from keywords in the name. Only rows matching your PriceFirst category are imported — mismatched rows (e.g. iPads in a Mobile Phones feed) are silently skipped.

Detection keywords

CategoryKeywordsBrand hints
mobile phonesiphone, samsung, galaxy, pixel, oneplus, xiaomi, huawei, oppo, nokia, motorola, sony xperia, smartphone, mobile phone, cell phone, redmi, poco, realme, honor, nothing phoneiphone→apple, galaxy→samsung, pixel→google, etc.
ipadipad, ipad pro, ipad air, ipad mini, tablet, galaxy tab, surface pro, surface go, lenovo tab, fire tabletipad→apple, galaxy tab→samsung, surface→microsoft, etc.

Products that don't match any keyword (e.g. Apple Watch) are rejected when no target category is set, or silently skipped when a target category is configured but the row doesn't match it.

Networks (whitelist + optional)

The network column is optional. Blank, none, n/a, wifi, na, or no network all mean the device has no network — the row is stored without a network attribute so it can match Wi-Fi-only variants.

  • With network — send one of the whitelisted carrier slugs below. Anything else is rejected with invalid_network.
  • Without network — leave blank or use any of the recognised sentinels above.
Allowed values for cellular devices
unlocked
other
ee
o2
three
vodafone
giffgaff
tesco mobile
virgin
orange
t-mobile

Conditions (whitelist)

Values are case-insensitive but matched exactly — there is no alias map. If the condition column is empty or missing, the parser defaults to good.

Allowed values
new
excellent
very good
good
fair
poor
broken

Sample CSV (tab-separated)

product_id	product	link	price	network	condition
PF-MOB-0001	iPhone 15 Pro 128GB	https://sell.example.com/iphone15	450	unlocked	excellent
PF-MOB-0002	iPhone 14 256GB	https://sell.example.com/iphone14	320	o2	good
PF-IPAD-0001	iPad Pro 11 inch	https://sell.example.com/ipadpro	800	none	excellent
PF-IPAD-0002	iPad Air 256GB	https://sell.example.com/ipadair	600		good

In the sample above, the iPhone rows are imported when the configured category is Mobile Phones, and the iPad rows are imported when it's iPad. Rows from the other category are skipped.

Attribute normalisation (what's stored)

AttributeSource columnNormalisation
brandproductDetected from keywords in the product name; falls back to unknown.
storageproductExtracted from capacity in the product name (e.g. 128GB, 1TB).
networknetworkCarrier slug from the whitelist, or omitted entirely for Wi-Fi-only rows.
conditionconditionLowercased and resolved to one of the base conditions. Defaults to good.

Validate your feed with the Feed Validator before going live — select CSV Format → Compare and Recycle to test with this parser. It runs the same rules as live ingest in dry-run mode and returns per-row errors with line numbers and codes.