Node.js · GitHub Actions · SFTP · XML · Jest
Bazaarvoice to PowerReviews Feed Pipeline
Daily CI/CD feed sync that cut catalog lag from 24 hours to under one
<1 hr
catalog sync lag (from 24 hrs)
<5 min
failure detection (from 4 hrs)
Problem
Migrating reviews platforms meant the product catalog had to flow from Bazaarvoice-shaped data to PowerReviews' XML feed spec every day. The manual export process introduced up to 24 hours of catalog lag, and when a sync silently failed, nobody found out for around 4 hours — meaning new products showed no reviews on live pages.
Approach
Built the transform in Node.js with the feed contract pinned down by Jest tests first (TDD), so the PowerReviews XML spec is encoded as executable assertions.
Scheduled the pipeline as a daily GitHub Actions workflow with secret-managed credentials — no server to maintain, full run history in CI.
Added exponential-backoff retry around fetch and SFTP delivery, so transient network failures self-heal instead of dropping the day's feed.
Validated the generated XML against the spec before upload, failing the run loudly rather than shipping a malformed feed.
Wired Slack failure alerting into the workflow so a broken sync pages a human in minutes, not hours.
Architecture
+------------------------------+
| Bazaarvoice product feed |
+---------------+--------------+
v
+------------------------------+
| GitHub Actions (daily cron) |
| fetch -> transform -> XML |
| validate -> retry w/ backoff |
+-------+---------------+------+
| |
v v
+---------------+ +------------+
| PowerReviews | | Slack |
| SFTP ingest | | alerting |
+---------------+ +------------+Results
Catalog sync lag cut from 24 hours to under 1 hour — same-business-day review indexing on all product pages.
Failure-detection lag cut from 4 hours to under 5 minutes via Slack alerting on any failed run.
Manual export step eliminated entirely; the pipeline has a full audit trail in CI run history.
Feed contract locked in by Jest TDD coverage, so spec regressions fail in CI before they reach production.