Data dictionaryTen columns in the file,
ten in the JSON.
Taken from the header row of real runs. Our testing covered a single merchant, so read the optional-field notes as what that company's reviewers chose to fill in, not as a rate the scraper achieves.
- query
- The review URL or bare merchant identifier you submitted, repeated verbatim on every row that came from it.
- merchant
- The merchant’s Feefo identifier - the slug that follows
/reviews/ in the URL, such as m-c-fire-protection. A slug, not a trading name: it is lower-case and hyphenated, and it is what you would paste back in as a query. - customer
- The reviewer’s display name as Feefo shows it. Optional - an empty cell means the review was published without one.
- location
- Where the reviewer says they are, verbatim and unnormalised. The sample holds
GBR, London, CORNWALL, Cheltenham. and Mullion Cove, Cornwall side by side, so treat it as free text rather than as a place. Often blank. - rating
- The star rating, 1 to 5, as a whole number. A string in the export, not a number. Filled on every row; the sample ran 3 to 5.
- title
- The review headline. Optional - Feefo does not require one, and an empty cell means the customer wrote straight into the body.
- review
- The review body, verbatim, including the reviewer’s own line breaks, which matters if you are parsing the CSV by hand. Filled on every row.
- date
- When the review was posted, as a full ISO 8601 UTC timestamp with milliseconds -
2026-01-23T11:11:33.205Z, not a plain date. Filled on every row. - helpful_votes
- How many readers marked the review helpful. Usually blank; an empty cell means nobody voted, not that the count failed to collect.
- review_url
- Permalink to the individual review on feefo.com. Filled on every row - of a URL query and of a bare-slug query alike.